この PHP を指定ファイル名で呼び出すと、幅を 100px で縮小された画像を返します( 無ければ縮小画像を返します )。 ▼ 縮小 imagecopyresampled
<?php
$debug = false;
// *************************************
// 画像があるフォルダの相対パス
// *************************************
$image_dir = 'images';
// *************************************
// QueryString より対象の
// 画像ファイル名を取得
// *************************************
$file = "{$image_dir}/{$_GET['name']}";
// *************************************
// 画像が存在しない場合は、
// エラー用の画像をブラウザに返す
// *************************************
if ( !file_exists( $file ) || $_GET['name'] == '' ) {
header("Content-Type: image/png");
$file = "{$image_dir}/error.png";
header('Content-Length: ' . filesize($file));
readfile($file);
exit();
}
// *************************************
// ファイルの MIME を取得
// *************************************
$mime = image_type_to_mime_type( exif_imagetype( $file ) );
// *************************************
// ファイル名から拡張子を除いた部分を
// 取得して、縮小ファイルのファイルの
// パスを作成する( .jpg )
// *************************************
$path_parts = pathinfo($_GET['name']);
$small_file = "{$image_dir}/s/{$path_parts['filename']}.jpg";
// *************************************
// 縮小ファイルがなければ作成して
// ブラウザに返す、あればそのまま返す
// *************************************
if ( !file_exists( $small_file ) ) {
if ( ImageConvert( $image_dir, $_GET['name'], exif_imagetype( $file ) ) ) {
header("Content-Type: image/jpeg");
header('Content-Length: ' . filesize($small_file));
readfile($small_file);
}
else {
// 縮小に失敗した場合は、大きい元のファイルを返す
header("Content-Type: {$mime}");
header('Content-Length: ' . filesize($file));
readfile($file);
}
}
else {
header("Content-Type: image/jpeg");
header('Content-Length: ' . filesize($small_file));
readfile($small_file);
}
// *************************************
// ファイルを縮小して保存
// *************************************
function ImageConvert( $dir, $filename, $type ) {
log_print( "$dir, $filename, $type" );
// *************************************
// ファイルの属性等を取得
// *************************************
$target = getimagesize( "$dir/$filename" );
log_print( print_r($target,true) );
// 現在のサイズ
$width = $target[0];
$height = $target[1];
$width_new = 100; // 幅固定
// *************************************
// 縮小後の高さを計算で求める
// *************************************
$height_new = (int)( ($height/$width)*$width_new );
$target_path = "$dir/$filename";
$jpeg = false;
// *************************************
// 画像の種類によって、オブジェクト作成方法を選択する
// *************************************
if ( $type == 2 ) {
$jpeg = @imagecreatefromjpeg( $target_path );
}
if ( $type == 3 ) {
$jpeg = @imagecreatefrompng( $target_path );
}
if ( $type == 4 ) {
$jpeg = @imagecreatefromgif( $target_path );
}
if ( $jpeg === false ) {
return false;
}
log_print( "現画像取得" );
// *************************************
// 新しい空のイメージ
// *************************************
$jpeg_new = @imagecreatetruecolor( $width_new, $height_new );
if ( $jpeg_new === false ) {
return false;
}
log_print( "新しい画像取得" );
// *************************************
// サイズ変更して新しいイメージへ転送
// *************************************
$ret = @imagecopyresampled(
$jpeg_new,
$jpeg,
0,
0,
0,
0,
$width_new,
$height_new,
$width,
$height
);
if ( !$ret ) {
return false;
}
log_print( "縮小完了" );
// *************************************
// JPEG ファイルとして、
// クオリティ 75 で出力
// *************************************
$path_parts = pathinfo($filename);
$ret = @imagejpeg ( $jpeg_new, "$dir/s/{$path_parts['filename']}.jpg", 75 );
if ( !$ret ) {
return false;
}
log_print( "ファイル出力完了:$dir/s/{$path_parts['filename']}.jpg" );
return true;
}
// *************************************
// デバッグログ
// *************************************
function log_print( $msg ) {
if ( !$GLOBALS['debug'] ) {
return false;
}
file_put_contents("debug.log", $msg ,FILE_APPEND );
file_put_contents("debug.log", "\n" ,FILE_APPEND );
}
?>
|
|
【PHPの最新記事】
- PHP で cURL はオプションが全て。いろいろあるので、ちょっとまとめ【2014/7/31の記事】
- PHP における標準的なテスト用アップロードのテンプレート
- PHP : MySQL から JSON 文字列を返す自作(テスト用) API テンプレート
- ImageMagick を Windows(32ビット)の PHP で利用する
- PHPで、ベタベタな日付チェック。汎用的とも言うw
- PHP でカタカナのフリガナ入力のチェック
- TCPDF で罫線を引く
- フリーフォントを使って PHP 画像(GD)として埋め込むアクセスカウンターの DB 処理部分
- フリーフォントを使って PHP 画像(GD)として埋め込むアクセスカウンターの画像出力部分の作成
- PHP + GD : 四角形への DropShadow
- PHP : ログインとブラウザの当日日付データ
- hash_hmac は秘密鍵があるので、辞書の総当りとかでパスワードは解りませんから。パスワード抜かれるのは、フィッシングがスパイウェアか、本人が口に出した場合ですね。
- すごく当たり前の事なんですが、UTF-8N で保存されたテキストファイルをメモ帳で変更して保存したら先頭に EF BB BF という爆弾が仕掛けられるのでダメですよ
- 5秒毎にリロードする PHP ページ
- 実用的かどうかは置いておいて、修正画面の日付入力に jQuery のカレンダーを使用する
- PHPで使用する為にフォント(.TTC)の分解
- PHP : GD で Windows のビットマップを扱う
- 【PHP】 <?=$value?> ではない変数埋め込み手法
- PHPでサービス停止( extension=php_com_dotnet.dll )
- PHP : コマンドライン php(cli) で10進数と16進数の変換




























