ImageMagick 在 Python 子进程中删除元数据时损坏 JPEG 数据
ImageMagick Corrupt JPEG Data While Removing Metadata in Python Subprocess
我正在尝试使用 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 似乎以某种方式损坏了文件。感谢您提供的任何帮助!
我找到了解决方法!我需要先关闭文件 运行 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")
现在元数据已被无损删除。
我正在尝试使用 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 似乎以某种方式损坏了文件。感谢您提供的任何帮助!
我找到了解决方法!我需要先关闭文件 运行 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")
现在元数据已被无损删除。