使用python中的imagemagick下载、写入、转换和保存(损坏的图像)

使用python中的imagemagick下载、写入、转换和保存(损坏的图像),python,imagemagick,corrupt-data,Python,Imagemagick,Corrupt Data,好吧,我已经试着解决这个问题六个小时了,但它没有发生 我有一个函数,它可以使用。这些图像被保存到我的桌面上的一个特定的目录中。 当我试图打开那个图像,重命名它,然后处理它,然后一切都中断了 以下是设置所有内容的初始方法: def createImage(): AB_CODES = ["WHK", "WHN", "WWW", "XBU", "XSM"] BASE_URL = "http://url_where_I_get_images_from" orig_dir =

好吧,我已经试着解决这个问题六个小时了,但它没有发生

我有一个函数,它可以使用。这些图像被保存到我的桌面上的一个特定的目录中。 当我试图打开那个图像,重命名它,然后处理它,然后一切都中断了

以下是设置所有内容的初始方法:

def createImage():

    AB_CODES = ["WHK", "WHN", "WWW", "XBU", "XSM"]
    BASE_URL = "http://url_where_I_get_images_from"

    orig_dir = "originals/"
    new_dir = "processed/"

    # Add new image for each code
    for code in AB_CODES:
        radar_dir = BASE_URL + code
        url = requests.head(radar_dir)

        #parseUrl creates a valid timestamp corresponding to the latest image.
        timestamp = parseUrl(url)

        filename = timestamp + "_" + code + "_PRECIP_RAIN.gif"
        radar = BASE_URL + code + "/" + filename
        radar_img = requests.get(radar, timeout=30.000)

        # This is where the file from original source gets saved to my desktop, works.
        # Image gets saved in path/originals/img.gif
        if (radar_img.status_code == requests.codes.ok):
            image = radar_img.content
            filepath = os.path.join(orig_dir, filename)
            imgfile = open(filepath, "wb")
            imgfile.write(image)
            imgfile.close()

            # This is where I create a new image to be saved and worked on in
            # path/processed/new_img.gif
            image = radar_img.content
            filename = code + "_radar.gif"
            convpath = os.path.join(new_dir, filename)
            convimg = open(convpath, "wb")
            convimg.write(image)
            # This is the call to the function where I use imagemagick
            # which is not working
            image = processImage(convimg.name, "processed/XSM_radar_output.gif")
            convimg.close()
下面是构成我的处理函数的两种方法。现在它处于测试阶段,因为它无法工作

def formatArg(arg):
    if arg.startswith("#") or " " in arg:
        return repr(arg)
    return arg

def processImage(input, output, verbose=True, shell=True):
    args = [
        "convert", input, 
        "-resize", "50x50", 
        output
    ]

    if verbose:
        print("Image: %s" % input)
        print(" ".join(formatArg(a) for a in args))
        print
    if os.path.exists(input):
        try:
            result = subprocess.check_call(args)
        except subprocess.CalledProcessError:
            result = False

        if result:
            print("%s : SUCCESS!" % output)
        else:
            print("%s : FAIL!" % output)
我在没有shell的情况下尝试过。我收到的错误消息是图像已损坏:

Image: processed/XSM_radar.gif
convert processed/XSM_radar.gif -resize 50x50 processed/XSM_radar.gif
convert.im6: corrupt image `processed/XSM_radar.gif' @ error/gif.c/ReadGIFImage/1356.
convert.im6: no images defined `processed/XSM_radar_output.gif' @    error/convert.c/ConvertImageCommand/3044.
processed/XSM_radar.gif : FAIL!
我不明白为什么它告诉我它被破坏了。我从命令行运行了这些完全相同的命令,它运行得很好。
我已导入子流程

有人帮我确定错误

def processImage(input, output, verbose=True, shell=True):
    args = [
        "convert", input, 
        "-resize", "50x50", 
        output
    ]

if verbose:
    print("Image: %s" % input)
    print(" ".join(formatArg(a) for a in args))
    print
if os.path.exists(input):
    try:
        **result = subprocess.check_call(args)**
    **except subprocess.CalledProcessError:**
        **result = False**
    **if result:**
        print("%s : SUCCESS!" % output)
    else:
        print("%s : FAIL!" % output)
这一部分的结果应该是正确的

result_code = subprocess.check_call(args)
如果它返回错误,result_code应该设置为1。 因此:

谢谢你的关注!
祝您度过愉快的一天。

也许您的python正在另一个目录中运行,您需要在文件名上放置一个完整的路径——这只是一个想法。
if result_code == 0:
    do stuff