我正在尝试使用Python子流程和ImageMagick从上传的测试jpeg文件中删除元数据。
使用ImageMagick CLI时,元数据删除过程完美无缺
$ mogrify -strip -auto-orient ~/Project/test.jpg
请注意,mogrify
与convert
相同,但会保存原始文件。
当我使用Python子进程时,图像会沿着边缘被破坏。
幸运的是,错误日志中记录了错误:
[cgi:error] mogrify.exe: Premature end of JPEG file `../www/user-images/test.jpg'
[cgi:error] mogrify.exe: Corrupt JPEG data: premature end of data segment `../www/user-images/test.jpg' @ warning/jpeg.c/JPEGWarningHandler/352.\r
[cgi:error] mogrify.exe: Premature end of JPEG file `../www/user-images/test.jpg' @ warning/jpeg.c/JPEGWarningHandler/352.\r
[cgi:error] mogrify.exe: Corrupt JPEG data: premature end of data segment `../www/user-images/test.jpg' @ warning/jpeg.c/JPEGWarningHandler/352.\r
[cgi:error] mogrify.exe: Corrupt JPEG data: found marker 0xd9 instead of RST5 `test.jpg' @ warning/jpeg.c/JPEGWarningHandler/352.\r
如果没有ImageMagick,图像会完美上传。
Python脚本:
import cgi, os, sys, shutil, subprocess, logging
from subprocess import CalledProcessError
form = cgi.FieldStorage()
fileitem = form['test_file']
image_path = "test.jpg"
with open(image_path, 'wb') as current_file:
# Copy file contents to new file
shutil.copyfileobj(fileitem.file, current_file)
# Remove metadata
try:
subprocess.check_output(['C:\Program Files\ImageMagick-6.9.3-Q16\mogrify.exe', '-strip', '-auto-orient', image_path])
except CalledProcessError:
logging.error("Error encountered while processing image")
我用不同的参数(或没有参数!)测试了这个,并且mogrify似乎以某种方式损坏了文件。感谢您提供任何帮助!
答案 0 :(得分:2)
我找到了修复!在运行ImageMagick之前,我需要关闭文件。
with open(image_path, 'wb') as current_file:
# Copy file contents to new file
shutil.copyfileobj(fileitem.file, current_file)
# CLOSE THE FILE BEFORE USING SUBPROCESS
try:
subprocess.check_output(['C:\Program Files\ImageMagick-6.9.3-Q16\mogrify.exe', '-strip', '-auto-orient', image_path])
except CalledProcessError:
logging.error("Error encountered while processing image")
现在已删除元数据而不会损坏。