英文:
How crop/blur a .png using python-pillow, wihtout changing anything else
问题
我已经找到了一些有关如何使用Python的Pillow库裁剪图像的有用帖子,但使用Pillow裁剪.png图像会使颜色失真并稍微变暗图片。我使用.png,因为我想避免在处理中图像失真。
当我运行一个甚至不进行任何裁剪的虚拟脚本时:
from PIL import Image
with Image.open('test.png') as image:
image.save('test copy.png')
生成的副本文件大小约小于原始文件的30%,如果在照片查看器中切换它们,可以明显看到颜色较暗。如何让Pillow裁剪图片但保持颜色不变?我还希望使用局部模糊(用于匿名化)以不改变图像的其余部分来应用模糊。
编辑:上传了.png文件和褪色的副本到https://github.com/Densaugeo/stack-overflow-question/tree/main。
英文:
I've found several helpful posts on here explain how to crop an image with the Pillow library for Python, but cropping a .png with pillow distorts the colors and darkens the picture a bit. I'm using .png because I want to avoid the images getting distorted in processing.
When I run a dummy script that doesn't even do any cropping:
from PIL import Image
with Image.open('test.png') as image:
image.save('test copy.png')
The resulting copy is ~30% smaller in file size than the original and noticeably darker, if you flip between them in a photo viewer. How do I get Pillow to crop a picture but leave the colors alone? I'd also like to do the same with local blur (for anonymization), apply a blur in one area without altering the rest of the image.
EDIT: Uploaded .png file and discolored copies to https://github.com/Densaugeo/stack-overflow-question/tree/main
答案1
得分: 2
您的 test.png 文件具有值为 50994 的 gAMA
块,但您的输出文件没有该块。为了以相同的颜色呈现,它们还需要该块。
英文:
Your test.png file has a gAMA
chunk with value 50994, but your output files do not. They would also need that chunk in order to render with the same colors.
答案2
得分: 1
赞扬和给@MarkAdler的点赞,因为他找出了缺少gAMA块的问题。以下是使用exiftool
将一个文件的gAMA传播到另一个文件的方法:
exiftool -tagsfromfile goodImage.png -gamma brokenImage.png
你可能可以在Python中完成这个操作,通过调整这个答案。
这里是另一种使用pngcheck
和pngcrush
的方法。
英文:
Kudos, and upvotes to @MarkAdler for sleuthing the lack of gAMA chunk. Here is a method of propagating forward the gAMA from one file to another using exiftool
:
exiftool -tagsfromfile goodImage.png -gamma brokenImage.png
You can probably do this in Python, by adapting this answer.
Here is another method using pngcheck
and pngcrush
.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论