从目录中进行GD图像批处理

时间:2012-11-01 16:50:23

标签: php gd

真的绞尽脑汁,我已经研究了2天以上了。

目标是什么?单击/选择带图像的子目录;在提交时,批处理将在选择的整个DIR上使用GD运行,在同一服务器上的/ thumb文件夹中创建拇指。

状态?我可以一次为一个文件执行此操作,需要一次执行多个文件。

这是我的一次性代码:

$filename = "images/r13.jpg";

list($width,$height) = getimagesize($filename);

$width_ratio = 166 / $width;
if ($height * $width_ratio <= 103)
{
    $adjusted_width = 166;
    $adjusted_height = $height * $width_ratio;
}
else
{
    $height_ratio = 103 / $height;
    $adjusted_width = $width * $height_ratio;
    $adjusted_height = 103;
}

$image_p = imagecreatetruecolor(166,103);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p,$image,ceil((166 - $adjusted_width) / 2),ceil((103 - $adjusted_height) / 2),0,0,ceil($adjusted_width),ceil($adjusted_height),$width,$height);

imagejpeg($image_p,"images/thumbs/r13.jpg",70);

正如您所看到的,脚本是针对单个文件的,我想迭代目录而不是指定名称。

(我也会研究imagemagick,但目前它不是一个选项。)

我将继续经历SO等,但任何帮助都将是巨大的。

感谢。

1 个答案:

答案 0 :(得分:4)

你需要从这段代码中创建一个函数:

function processImage($filename){
    list($width,$height) = getimagesize($filename);

    $width_ratio = 166 / $width;
    if ($height * $width_ratio <= 103)
    {
        $adjusted_width = 166;
        $adjusted_height = $height * $width_ratio;
    }
    else
    {
        $height_ratio = 103 / $height;
        $adjusted_width = $width * $height_ratio;
        $adjusted_height = 103;
    }

    $image_p = imagecreatetruecolor(166,103);
    $image = imagecreatefromjpeg($filename);
    imagecopyresampled($image_p,$image,ceil((166 - $adjusted_width) / 2),ceil((103 - $adjusted_height) / 2),0,0,ceil($adjusted_width),ceil($adjusted_height),$width,$height);

    imagejpeg($image_p,"images/thumbs/".basename($filename),70);
    imagedestroy($image_p);
}

请注意这个函数的最后两行:它根据传递的fiulename编写thumb并销毁资源,释放内存。

现在将此应用于目录中的所有文件:

foreach(glob('images/*.jpg') AS $filename){
    processImage($filename);
}

基本上就是这样。