Using ImageMagick's “convert” utility as a Python subprocess

风格不统一 提交于 2019-12-08 10:17:33

问题


I'm looking to convert a large directory of thumbnails.

Instead of using the PythonMagick wrapper I'd like to access the convert binary directly (I have a lot of flags, and think this would be more efficient for a large quantity of photos.)

Are there any working examples of using ImageMagick as a subprocess? Or, is there a better way to do this?

Specifically, I'm not sure how to start and end a Python subprocess from within a class. My class is called ThumbnailGenerator. I'm hoping to make something like this:

>> t = ThumbnailGenerator()
>> t.makeThumbSmall('/path/to/image.jpg')  
>> True

回答1:


Here's what I've used in one project:

def resize_image(input, output, size, quality=None, crop=False, force=False):
    if (not force and os.path.exists(output) and
        os.path.getmtime(output) > os.path.getmtime(input)):
        return
    params = []
    if crop:
        params += ["-resize", size + "^"]
        params += ["-gravity", "Center", "-crop", size + "+0+0"]
    else:
        params += ["-resize", size]
    params += ["-unsharp", "0x0.4+0.6+0.008"]
    if quality is not None:
        params += ["-quality", str(quality)]
    subprocess.check_call(["convert", input] + params + [output])

This will start one process per conversion. If the source images aren't two small, the process startup overhead will be comparatively small.



来源:https://stackoverflow.com/questions/12204287/using-imagemagicks-convert-utility-as-a-python-subprocess

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!