使用PHP和ImageMagick调整批量图像大小

时间:2010-07-05 03:56:29

标签: php batch-file imagemagick

在我网站的早期,我允许用户上传他们想要的任何尺寸的图片。我现在有客户端和服务器端配置将新图像限制为最大2000px,同时保持原始比率。

所以从旧的配置我有一堆大图像目录,我需要缩小,我想在服务器端批量执行此操作(由于客户端带宽限制),并在生命周期我,我无法解决这个问题。我意识到它会导致服务器端CPU高,所以我会在几天内分组进行。

由于主机RAM限制,我无法使用GD进行缩放,因此我可以使用ImageMagick。

我将在一批中进行的一组示例如下所示:
/ Images / 01/101 / abc.jpg
/ Images / 01/101 / random.jpg
/ Images / 01/101 / randomfile.jpg
/ Images / 01/184 / random.jpg
/ Images / 01/184 / photo.jpg
/ Images / 03/372 / randomnumber.jpg
/ Images / 03/372 / randomanything.jpg

所以我追求的是:

  • 当找到JPG时,递归浏览所有目录和子目录,寻找JPG -
    • 计算当前比率
    • 将原始文件重命名为origional.jpg.old
    • 将文件的高度/宽度调整为最大2000px,同时保持纵横比
    • 使用origional.jpg文件名
    • 将文件写入磁盘
    • 检查新的origional.jpg是否是有效的快乐文件
      • 如果它是一个快乐的文件删除origional.jpg.old
  • 然后处理下一个文件/文件夹。

我被困住了,请你帮忙。

由于 格雷格

1 个答案:

答案 0 :(得分:2)

  

当找到一个

时,递归遍历寻找JPG的所有目录和子目录

使用RecursiveDirectoryIteratorRecursiveIteratorIterator的组合,可能与RegexIterator一起使用。这个网站有一些例子。

  

计算当前比率

不必要的。

  

将原始文件重命名为origional.jpg.old

请参阅rename

  

将文件的高度/宽度调整为最大2000像素,同时保持纵横比

请参阅Imagick::resizeImageImagick::scaleImage

  

使用origional.jpg文件名

将文件写入磁盘

Imagick::writeImage

  

检查新的origional.jpg是否是有效的快乐文件

不必要的。

  

如果它是一个快乐的文件删除origional.jpg.old

请参阅unlink