resize

 

Source

<?php
// vim:set foldmethod=marker:

namespace bitlabo123;

// resize($orig_file, $resize_width, $resize_height)
/*{{{*/
function resize($orig_file, $resize_width, $resize_height) { 
    // GDライブラリがインストールされているか
    if (!extension_loaded('gd')) {
        // エラー処理
        return false;
    }

    // 画像情報取得
    $result = getimagesize($orig_file);
    list($orig_width, $orig_height, $image_type) = $result;


    // 画像をコピー
    // 1 IMAGETYPE_GIF
    // 2 IMAGETYPE_JPEG
    // 3 IMAGETYPE_PNG
    switch ($image_type) {
        case 1: $im = imagecreatefromgif($orig_file); break;
        case 2: $im = imagecreatefromjpeg($orig_file);  break;
        case 3: $im = imagecreatefrompng($orig_file); break;
        default: return false;
    }

    if ($resize_width != 0 && $resize_height !=0) {
    } else if ($resize_height == 0) {
        $resize_height = floor(($orig_height * $resize_width) / $orig_width);
    } else if ($resize_width == 0) {
        $resize_width = floor(($orig_width * $resize_height) / $orig_height);
    }

    // コピー先となる空の画像作成
    $new_image = imagecreatetruecolor($resize_width, $resize_height);
    if (!$new_image) {
        // エラー処理 
        // 不要な画像リソースを保持するメモリを解放する
        imagedestroy($im);
        return false;
    }

    // GIF、PNGの場合、透過処理の対応を行う
    if (($image_type == 1) OR ($image_type==3)) {
        imagealphablending($new_image, false);
        imagesavealpha($new_image, true);
        $transparent = imagecolorallocatealpha($new_image, 255, 255, 255, 127);
        imagefilledrectangle($new_image, 0, 0, $resize_width, $resize_height, $transparent);
    }

    // コピー画像を指定サイズで作成
    if (!imagecopyresampled($new_image, $im, 0, 0, 0, 0, $resize_width, $resize_height, $orig_width, $orig_height)) {
        // エラー処理
        // 不要な画像リソースを保持するメモリを解放する
        imagedestroy($im);
        imagedestroy($new_image);
        return false;
    }

    // コピー画像を保存
    // $new_image : 画像データ
    // $new_fname : 保存先と画像名
    // クオリティ

    // 1 IMAGETYPE_GIF
    // 2 IMAGETYPE_JPEG
    // 3 IMAGETYPE_PNG
    switch ($image_type) {
    case 1: $result = imagegif($new_image, $orig_file); break;
    case 2: $result = imagejpeg($new_image, $orig_file, 100); break;
    case 3: $result = imagepng($new_image, $orig_file); break;
    default: return false;
    }

    if (!$result) {
        // エラー処理 
        // 不要な画像リソースを保持するメモリを解放する
        imagedestroy($im);
        imagedestroy($new_image);
        return false;
    }

    // 不要になった画像データ削除
    imagedestroy($im);
    imagedestroy($new_image);
} /*}}}*/

Links

Comment



Today: 1 / Yesterday: 0 / Total: 77

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   最終更新のRSS
Last-modified: 2019-12-23 (月) 12:03:54