在Python中使用imagemagick下载、写入、转换和保存(图像损坏)
好的,我已经尝试解决这个问题大约六个小时了,但就是没能搞定。
我有一个函数,它会根据时间戳从一个网址抓取一堆图片(GIF文件),使用的是Requests库。这些图片会被保存到我桌面上的一个特定文件夹里,保存得很好。可是,当我尝试打开这些图片、重命名并处理它们的时候,一切就崩溃了。
这是最初设置一切的函数:
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=true。出现的错误信息是图片损坏:
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!
我不明白为什么会告诉我图片损坏。我在命令行中运行这些完全相同的命令时,一切都正常。(我已经导入了subprocess)
1 个回答
0
有人帮我找到了错误。
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。
所以:
if result_code == 0:
do stuff
谢谢你的关注!祝你有美好的一天。