2010/07/29
php | サムネイル処理コピペ
些細なくせに汎用化しようとすると大げさ、でも使用頻度は高い処理です。
バッチするときにクラスは使いにくいのでコピペ用の function で。
<?php
//ini_set('memory_limit', '128M');
//set_time_limit(0);
$items = array();
forEach(glob('Images/*.jpg') as $file){
$item = array($file,fileMTime($file));
$key = sha1(implode('&',$item));
thumbByHeight( $file,"thumbCache/$key.height.jpg");
thumbByWidth( $file,"thumbCache/$key.width.jpg");
thumbInside( $file,"thumbCache/$key.inside.jpg");
$items[] = $item;
}
//print_r($items);
function thumbByHeight($sourceFile,$thumbFile,$thumbHeight = 100){
if(!file_exists($sourceFile)) return false;
if(!file_exists($thumbFile)){
$src = imageCreateFromString(file_get_contents($sourceFile));
$srcWidth = imageSX($src);
$srcHeight = imageSY($src);
$scale = $thumbHeight/$srcHeight;
$thumbWidth = round($srcWidth*$scale);
$thumb = imageCreateTruecolor ( $thumbWidth , $thumbHeight );
imageCopyResampled(
$thumb, $src,
0,0, 0,0,
$thumbWidth,$thumbHeight, $srcWidth,$srcHeight
);
imagejpeg ($thumb,$thumbFile,100);
touch($thumbFile,fileMTime($sourceFile));
}
return $thumbFile;
}
function thumbByWidth($sourceFile,$thumbFile,$thumbWidth = 100){
if(!file_exists($sourceFile)) return false;
if(!file_exists($thumbFile)){
$src = imageCreateFromString(file_get_contents($sourceFile));
$srcWidth = imageSX($src);
$srcHeight = imageSY($src);
$scale = $thumbWidth/$srcWidth;
$thumbHeight = round($srcHeight*$scale);
$thumb = imageCreateTruecolor ( $thumbWidth , $thumbHeight );
imageCopyResampled(
$thumb, $src,
0,0, 0,0,
$thumbWidth,$thumbHeight, $srcWidth,$srcHeight
);
imagejpeg($thumb,$thumbFile,100);
touch($thumbFile,fileMTime($sourceFile));
}
return $thumbFile;
}
function thumbInside($sourceFile,$thumbFile,$thumbSize = 100){
if(!file_exists($sourceFile)) return false;
if(!file_exists($thumbFile)){
$src = imageCreateFromString(file_get_contents($sourceFile));
$srcWidth = imageSX($src);
$srcHeight = imageSY($src);
if($srcWidth>$srcHeight){
$thumbWidth = $thumbSize;
$scale = $thumbWidth/$srcWidth;
$thumbHeight = round($srcHeight*$scale);
}else{
$thumbHeight = $thumbSize;
$scale = $thumbHeight/$srcHeight;
$thumbWidth = round($srcWidth*$scale);
}
$thumb = imageCreateTruecolor ( $thumbWidth , $thumbHeight );
imageCopyResampled(
$thumb, $src,
0,0, 0,0,
$thumbWidth,$thumbHeight, $srcWidth,$srcHeight
);
imagejpeg($thumb,$thumbFile,100);
touch($thumbFile,fileMTime($sourceFile));
}
return $thumbFile;
}