为特定文件夹中的图像创建缩略图

时间:2013-08-25 16:11:52

标签: python wand

我想使用Wand(imagemagick)为python创建图像缩略图(250x250px)。

我希望结果类似于PHP的imagecopyresampled() ** 功能,如果可能的话,不会有质量损失。

我的目录结构如下:

> main folder (level 1) -> only one

>> company folder (level 2 - inside main folder) -> 286 company folders

>>> product folder (level 2 - inside each company folder)
>>> property folders (level 2 - inside each company folder) -> number depending on number of properties that each company owns

>>>> imagename.jpg (level 3 - inside each property folder) -> number depending on number of images.
>>>> imagename_thumb.jpg (level 3 - inside each property folder) -> old, smaller thumbs, one for every original image in folder. These should be deleted/replaced with new ones.

现在我想要实现的是为每个imagename.jpg图像创建缩略图(如前所述),用新的图像替换旧的imagename_thumb.jpg图像。

请注意:产品文件夹中也有一些图像,但我不想为这些创建拇指,所以在循环浏览文件时是否可以避免使用此文件夹?

原因:我们最近决定重新设计使用更大缩略图的在线应用程序。手动更换所有现有的较小缩略图几乎是不可能的。


**解释imagecopyresampled()功能(裁剪,重新采样),以便更好地了解我想要达到什么样的拇指:

  

imagecopyresampled()将一个图像的矩形部分复制到   另一个图像,平滑地插值像素值,以便在   特别是,减小图像的大小仍然保留很多   清晰度。

     

换句话说,imagecopyresampled()将采用矩形区域   src_image的宽度为src_w,高度为src_h的位置(src_x,src_y)   并将其放在宽度为dst_w和dst_image的矩形区域中   高度dst_h在位置(dst_x,dst_y)。

     

如果源和目标坐标和宽度和高度   不同的是,图像片段的适当拉伸或收缩会   被执行。坐标指的是左上角。这个   函数可用于复制同一图像中的区域(如果   dst_image与src_image相同但是如果区域重叠了   结果将无法预测。

1 个答案:

答案 0 :(得分:1)

从我对same question on superuser的回复中重新发布。 (在你明显决定使用Wand之前。所以你应该交换子进程调用来转换为适当的Wand调用。)

import os
import subprocess

for root, dirs, files in os.walk('company 3\company 3 property'):
    images = [os.path.join(root, f) for f in files if f.endswith('.jpg') and not '_thumb' in f]
    for f in images:
        outbase = f[:-4] # simply remove '.jpg'
        out = outbase += '_thumb.jpg'
        args = ['convert', f, '-scale', '250x250', out]
        subprocess.call(args)