0

我想为 python 使用 Wand (imagemagick) 创建图像缩略图 (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_x,src_y) 处宽度为 src_w 和高度 src_h 的 src_image 获取一个矩形区域,并将其放置在位置 (dst_x,dst_y) 处宽度为 dst_w 和高度 dst_h 的 dst_image 矩形区域中。

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

4

1 回答 1

1

从我对 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)
于 2013-08-25T16:25:35.493 回答