我想裁剪图像并保存,但问题是保存相同格式后图像会发生显着变化。为什么会这样?我甚至没有在这个过程中转换它。
这是我的代码:
def square_crop(resized_image):
print "square crop"
width, height = resized_image.size
print width,height
edge_length = 3600
if(width >= height):
print("width>=height")
left = (width - edge_length)/2
top = (height - edge_length)/2
right = (width + edge_length)/2
bottom = (height + edge_length)/2
squared_image = resized_image.crop((left, top, right, bottom))
squared_image.save('squared.png')
令人困惑的部分是,此代码使用相同的图像并保存它而不更改色调,因此裁剪功能必须有问题:
def image_resize(image):
print "image resize"
width, height = image.size
print width,height
if(width > 3601 and height > 3601):
print width, height
if(width >= height):
ratio = float(width)/float(height)
w = 3601 * ratio
h = 3601.0
print ratio, w, h
resized_image = image.resize([int(w), int(h)])
resized_image.save("resized.png")
else:
ratio = float(height)/float(width)
print(ratio)
w = 3601.0
h = 3601 * ratio
print ratio, w, h
resized_image = image.resize([int(w), int(h)])
resized_image.save("heic1509a_resized.png")
*编辑:当我导入.jpg文件并保存到.jpg时,这两个函数都有相同的色调问题。与.tif。相同。
**编辑:我也注意到,对于某些图像,这种红色损失不会发生。我真的不知道发生了什么。我将保留前后截图以便自己查看。
***编辑:问题来自色彩空间,因为使用ProPhoto RGB色彩空间(ROMM RGB(参考输出中等公制))对保存时更改颜色的图像进行编码。
我正在使用gimp2将它们首先转换为RGB而不会丢失颜色,但我想找到一种方法从python自动执行此操作。
我将在此问题上发布任何新的更新。
答案 0 :(得分:1)
问题在于,当我保存文件时,PIL库会自动将图像的颜色空间(ROMM-RGB)切换到其他颜色空间(RGB或sRGB),基本上每种颜色都会更改。
您所要做的就是保留图像的色彩空间,这样你就可以了。如果要转换为其他颜色空间,请查找OpenCV library。
我无法详细解释,因为我只是在打破这个问题。以下是解决此问题的代码:
resized_image.save('resized.jpg', #file name
format = 'JPEG', #format of the file
quality = 100, #compression quality
icc_profile = resized_image.info.get('icc_profile','')) #preserve the icc profile of the photo(this was the one that caused problems)
以下是更深入答案的链接:LINK