Pillow调整大小、转换CMYK后保留JPG原图像剪切路径的问题求助
解决方案
Photoshop添加的剪切路径存储在JPG文件的APP13标记对应的8BIM元数据块中,你的原有代码没有迁移这块元数据,且调整图像尺寸后需要同步缩放路径坐标,否则路径会错位,以下是可直接使用的修改后代码:
import os from PIL import Image f = [PATH OF THE IMAGE FILE] # 读取原图 img = Image.open(f) original_w, original_h = img.size # 计算缩放比例用于后续路径坐标修正 scale_x = 3000 / original_w scale_y = 3000 / original_h file_name = (os.path.splitext(f))[0].upper() file_ext = '.jpg' # 保留原ICC配置 icc_profile = img.info.get("icc_profile") # 提取原图所有APP段元数据,重点保留存储剪切路径的APP13段 app_list = [] for seg, content in img.applist: app_list.append((seg, content)) # 处理图像 x_Img = img.resize([3000, 3000]).convert("CMYK") out_file = f'{file_name}{file_ext}' # 保存时传入app参数迁移元数据 x_Img.save( out_file, dpi=(300, 300), icc_profile=icc_profile, app=app_list )
补充说明
- 如果你的resize操作是非等比例的,保存后发现剪切路径错位,需要手动解析APP13中的8BIM路径数据,将所有路径锚点的x坐标乘以
scale_x、y坐标乘以scale_y,再把修改后的路径数据重新写入APP13段即可。 - 直接迁移全部APP段的操作也可以保留原图其他Photoshop私有元数据,不需要的话可以仅过滤保留APP13段。
内容的提问来源于stack exchange,提问作者Colin
相关产品推荐
相关产品推荐

