gpt4 book ai didi

python - ImageMagick 在 Python 子进程中删除元数据时损坏 JPEG 数据

转载 作者:行者123 更新时间:2023-12-01 03:59:20 24 4
gpt4 key购买 nike

我正在尝试使用 Python 子进程和 ImageMagick 从上传的测试 jpeg 文件中删除元数据。

使用 ImageMagick CLI 时,元数据删除过程完美运行

$ mogrify -strip -auto-orient ~/Project/test.jpg

请注意,mogrifyconvert 相同,只不过它保存的是原始文件。

当我使用 Python 子进程时,图像的边缘会被损坏。

Image with corruption

幸运的是,错误日志中记录了一个错误:

[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 在 Python 子进程中删除元数据时损坏 JPEG 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36893142/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com