2024-06-26 02:45:24 发布
网友
我想使用Python中的PIL将图像从各种模式(如RGBa、CMYK等)批量转换为sRGB。
但是,我不确定,也找不到它是否
image.convert("RGB")
函数将图像转换为sRGB或Adobe RGB。我的直觉告诉我它会转化成sRGB。
如果它转换成sRGB,那么如果我传入Adobe RGB image来转换函数,它会成功地转换成sRGB吗?
默认情况下,PIL对颜色空间(如sRGB和Adobe RGB)是不可知的。
如您所知,RGB只是红色、绿色和蓝色的三个8位值。CMYK是四个8位值。当您使用Image.convert('RGB')时,它只是将每个像素转换为三个8位值。因此它从根本上改变了图像的表示和存储方式。
Image.convert('RGB')
另一方面,sRGB和Adobe RGB只是RGB颜色空间。基本上,这些是如何在监视器、打印机或任何其他物理输出设备上呈现这三个值的规则。例如,这些规则可以通过Photoshop等软件以ICC配置文件的形式添加到JPEG文件中。但是,当您只使用Image.save时,PIL通常不会附加任何ICC配置文件。
Image.save
为了检查图像是否嵌入ICC配置文件,可以在字典中查找键'icc_profile',就像这样image.info。
'icc_profile'
image.info
为了保存保存带有PIL的ICC配置文件的JPEG图像,您可以使用如下方法:
img.save('image.jpg', format = 'JPEG', quality = 100, icc_profile = img.info.get('icc_profile',''))
要将任何RGB JPEG图像从其颜色空间转换为sRGB,可以使用以下函数:
import io from PIL import Image from PIL import ImageCms def convert_to_srgb(img): '''Convert PIL image to sRGB color space (if possible)''' icc = img.info.get('icc_profile', '') if icc: io_handle = io.BytesIO(icc) # virtual file src_profile = ImageCms.ImageCmsProfile(io_handle) dst_profile = ImageCms.createProfile('sRGB') img = ImageCms.profileToProfile(img, src_profile, dst_profile) return img
因此,转换为单个RGB颜色空间的代码可能如下所示:
img = Image.open('image_AdobeRGB.jpg') img_conv = convert_to_srgb(img) if img.info.get('icc_profile', '') != img_conv.info.get('icc_profile', ''): # ICC profile was changed -> save converted file img_conv.save('image_sRGB.jpg', format = 'JPEG', quality = 100, icc_profile = img_conv.info.get('icc_profile',''))
注意:您可能希望使用略低于100的质量。
输入示例(Adobe RGB JPEG):
示例输出(sRGB JPEG):
默认情况下,PIL对颜色空间(如sRGB和Adobe RGB)是不可知的。
如您所知,RGB只是红色、绿色和蓝色的三个8位值。CMYK是四个8位值。当您使用
Image.convert('RGB')
时,它只是将每个像素转换为三个8位值。因此它从根本上改变了图像的表示和存储方式。另一方面,sRGB和Adobe RGB只是RGB颜色空间。基本上,这些是如何在监视器、打印机或任何其他物理输出设备上呈现这三个值的规则。例如,这些规则可以通过Photoshop等软件以ICC配置文件的形式添加到JPEG文件中。但是,当您只使用
Image.save
时,PIL通常不会附加任何ICC配置文件。为了检查图像是否嵌入ICC配置文件,可以在字典中查找键
'icc_profile'
,就像这样image.info
。为了保存保存带有PIL的ICC配置文件的JPEG图像,您可以使用如下方法:
要将任何RGB JPEG图像从其颜色空间转换为sRGB,可以使用以下函数:
因此,转换为单个RGB颜色空间的代码可能如下所示:
注意:您可能希望使用略低于100的质量。
输入示例(Adobe RGB JPEG):
示例输出(sRGB JPEG):
相关问题 更多 >
编程相关推荐