PHP批处理使用Image Magick将文件夹中的所有图像转换为jpg

时间:2013-10-14 20:25:08

标签: php

我已将许多不同格式的图片上传到我服务器上的文件夹中。使用ImageMagick我想转换它们并将它们替换为JPG。

这是我的代码:

<?php

try
{
        /*** the image file ***/
        $image = 'temp_images/*.*';

        /*** a new imagick object ***/
        $im = new Imagick();

        /*** ping the image ***/
        $im->pingImage($image);

        /*** read the image into the object ***/
        $im->readImage( $image );

        /**** convert to png ***/
        $im->setImageFormat( "jpg" );

        /*** write image to disk ***/
        $im->writeImage( 'temp_images/input/*.jpg' );

        echo 'Image Converted';
}
catch(Exception $e)
{
        echo $e->getMessage();
}

?>

当我指定特定图片时,它会转换它,当我将abc.gif替换为*.*时,我收到以下错误。

  

'无法打开图片temp_images/input/*.*:没有这样的文件或目录@ error / blob.c / OpenBlob / 2638'

在文档中,我读到我可以使用mogrify,但我不知道在PHP中插入命令行的人。

2 个答案:

答案 0 :(得分:1)

您不能使用这样的通配符指定文件名。

您可以使用http://php.net/globdirectory functions来获取符合您要求的文件列表,然后使用foreach循环逐步执行这些文件。

答案 1 :(得分:0)

你真的不需要PHP,你可以直接在shell中做到这一点:

#!/bin/bash
shopt -s nullglob nocaseglob # Ignore case and errors
for i in *.png *.tif *.bmp   # Do all images except JPEGs
do
   newname=${i%.*}.jpg       # Strip file extension
   convert "$i" "$newname"   # Convert to JPEG
done

或者,如果您真的想在PHP中执行此操作,可以使用system()执行上述脚本。