在JPG图像中替换字符串



我有一些从安卓手机导入的图片,当试图在PC上打开时,我无法正常打开它。我可以用notepad++打开图像,将ICC_PROFILE部分修改为ICC_PROFILX来解决这个问题我尝试了这个python代码片段,但是图像被破坏了

with open("Sample.jpg") as r:
text = r.read().replace("ICC_PROFILE", "ICC_PROFILX")
with open("Sample.jpg", "w") as w:
w.write(text)

有什么办法吗?

JPEG是二进制格式;你需要读("rb")和写("wb")作为二进制来避免损坏,然后将两个参数中的bytes(b"...")传递给.replace方法。

with open("Sample.jpg", "rb") as r:
text = r.read().replace(b"ICC_PROFILE", b"ICC_PROFILX")
with open("Sample.jpg", "wb") as w:
w.write(text)

如果替换的长度与原始长度不完全相同,则会由于其他原因损坏文件。事实上,一个更好的解决方案是使用一个理解JPEG格式的专用图像库,但对于非常简单的事情,您有时可以不使用它。

当读写文本时,Python透明地规范化行结尾,因此您无法知道输入文件中是否包含nrn。还有其他一些极端情况,其中内部Unicode表示可能并不总是往返返回到完全相同的原始字节序列。如果您正在阅读的内容实际上不是文本,则始终使用二进制模式。

最新更新