フォームで送信されたpngを1/100に縮小して保存する

f:id:alfe1025:20131223181634p:plain

またしてもphp

サムネイル作りたい

ファイルをサーバーにアップロードしてもらったときに、
自動でサムネイル画像作れたらいいなーと思っていろいろ調べてみると、
どうやらGDライブラリというのを使うとphpで画像を扱えるらしい。

ということで、コード書いてみました。

まずはGDのインストール

UbuntuServer10.04の場合

    sudo apt-get install php5-gd

としてから、apacheを再起動すればOK

ちゃんとインストールできたかどうかは、

<?php phpinfo(); ?>

と書いたphpファイルを作って、ブラウザで開き
GDの項目があるか確認すればOK

pngを縮小するサンプルコード

他ページのアップロードフォームから送信されたこと前提で。

<?php

// コピー元画像の確認
if (!is_uploaded_file( $_FILES['upFile']['tmp_name'])) {
    echo 'ファイルが選択されていません。';
    exit();
}

$targetImage = $_FILES['upFile']['tmp_name'];
$targetName = $_FILES["upFile"]["name"];

//ファイル拡張子取得
$file_ex = substr($targetName, strrpos($targetName, '.') + 1);

/****png拡張子の縮小****/
if($file_ex === 'png'){
// ファイル名から、画像インスタンスを生成
$original = imagecreatefrompng($targetImage);

// コピー元画像のファイルサイズを取得
$image_w = imagesx($original);
$image_h = imagesy($original);

// 出力する画像サイズの指定
$width  = $image_w *0.1;
$height = $image_h *0.1;
// サイズを指定して、背景用画像を生成
$resize = imagecreatetruecolor($width, $height);

/* 透過情報をそのままに */
// アルファブレンディングをoffにする 
imagealphablending($resize, false); 
// 完全なアルファチャネル情報を保存する
imagesavealpha($resize, true);

// 背景画像に、画像をコピーする
imagecopyresampled(  $resize,  // 背景画像
            $original,// コピー元画像
            0, // 背景画像の x 座標
            0, // 背景画像の y 座標
            0, // コピー元の x 座標
            0, // コピー元の y 座標
            $width, // 背景画像の幅
            $height, // 背景画像の高さ
            $image_w, // コピー元画像ファイルの幅
            $image_h // コピー元画像ファイルの高さ
        );


// content type ヘッダ
header('Content-Type: image/png');

// 画像を出力する
imagepng($resize,           // 背景画像
         $_FILES["upFile"]["name"]//保存先
         );

// メモリを開放する
imagedestroy($resize);
imagedestroy($original);
?>

まとめ

ライブラリ系使わずに何とかする方法はわからなかったので断念。
何とかする方法があればレンタルサーバーで使えて便利なのですが。うむむ。