【问题标题】:PHP batch convert all images in a folder to jpg using Image MagickPHP使用Image Magick将文件夹中的所有图像批量转换为jpg
【发布时间】:2017-10-04 18:46:29
【问题描述】:

我已将许多不同格式的图像上传到我服务器上的一个文件夹中。使用 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 的是谁。

【问题讨论】:

  • 需要先获取文件夹中的每个文件;你不会自动完成。
  • 文件已经在文件夹中了。
  • 是的,但是您需要获取它们的列表并foreach 它。 php.net/glob 会有所帮助。

标签: php


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    你真的不需要 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() 来执行上面的脚本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-16
      • 2020-08-09
      • 1970-01-01
      • 1970-01-01
      • 2011-03-08
      • 2011-04-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多