FUN YOU BLOG

フォームで送信された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);
?>

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