几年来,我们一直在使用一个名为Onyx RIPCenter的程序来管理海报打印。这些图像是使用Photoshop生成的,并已加载到Windows的Onyx应用程序中。
最近,我们希望通过消除Photoshop并通过内置于python的自定义应用程序(使用枕头python-https://pillow.readthedocs.io/en/latest/)自动处理图像来实现工作流程的自动化
现在的问题是,当我打开通过RIPCenter中的自定义应用程序创建的图像时,我得到的毫米尺寸错误。
图像的实际尺寸为 924mm x 2108mm 相反,我明白了 2309.99毫米x 5269.79毫米
原因是应用程序读取的DPI错误,而不是180,而是读取72(实际大小(以像素为单位-6548 x 14938))。
自定义应用程序确实将所有相关信息设置为Exif数据,包括DPI。可以通过在Windows中检查图像文件的属性来验证。但是以某种方式在RIPCenter中打开图像时,它显示了错误的DPI值。
这是保存图像的代码。
@Before
public void setUp() throws Exception {
myService = PowerMockito.mock(AService.class);
finderBean = PowerMockito.mock(FinderBean.class);
update = PowerMockito.mock(Update.class);
config = PowerMockito.mock(Config.class);
PowerMockito.whenNew(FinderBean.class).withNoArguments().thenReturn(finderBean);
PowerMockito.when(finderBean.find(AService.class)).thenReturn(myService);
}
@Test
public void TestUpdateState() throws Exception {
callService = new CallService();
MemberModifier.field(CallService.class, "finderBean").set(callService, finderBean);
PowerMockito.when(finderBean.find(AService.class)).thenReturn(myService);
PowerMockito.when(myService.update(update, config)).thenReturn(true);
final boolean status = callService.getUpdateStatus();
assertTrue(status);
}
如果打开了相同的图像并将其保存在Photoshop中,则它将显示正确的DPI。我也尝试过Gimp,我得到了相同的结果。 DPI错误的图片在打开并保存在Gimp中后突然会获得正确的DPI。
我的理解是,像素(高度和宽度)和DPI值是从跨不同平台和应用程序的Exif数据读取的。但是Onyx RIPCenter应用程序是否有可能在其他地方寻找DPI?
下面是图像的exif数据。
保存在Photoshop中的图像的Exif数据,
def save_image(modified_image, image_file, source_image):
"""
Store the processed image into a file
:param modified_image: <Obj> modified image object
:param image_file: <String> output filename
:param source_image: <Obj> original image object
:return: <Boolean> True if saved
"""
# fix Onyx printer error
# https://media.readthedocs.org/pdf/piexif/latest/piexif.pdf
exif_dict = piexif.load(source_image.info["exif"])
exif_dict["0th"][piexif.ImageIFD.XResolution] = (180.0, 1)
exif_dict["0th"][piexif.ImageIFD.YResolution] = (180.0, 1)
exif_bytes = piexif.dump(exif_dict)
# if this is not set, then the save option will throw an error for setting subsampling='keep'
modified_image.format = source_image.format
try:
modified_image.save(
image_file,
icc_profile=source_image.info.get('icc_profile'),
dpi=source_image.info.get('dpi'),
exif=exif_bytes,
format=source_image.format,
subsampling='keep',
quality=95
)
del source_image
del modified_image
return True
except IOError as e:
print(e)
return None
保存在Python应用程序中的图像的Exif数据,
[ExifTool] ExifTool Version Number : 11.10
[System] File Name : A3-VictoriaGlenManor-RH-Copper-92.4x210.8-R.jpg
[System] Directory : /Users/vinodsudharshan/Downloads
[System] File Size : 34 MB
[System] File Modification Date/Time : 2018:08:24 14:37:25+02:00
[System] File Access Date/Time : 2018:08:27 23:27:08+02:00
[System] File Inode Change Date/Time : 2018:08:27 22:56:37+02:00
[System] File Permissions : rw-r--r--
[File] File Type : JPEG
[File] File Type Extension : jpg
[File] MIME Type : image/jpeg
[File] Exif Byte Order : Big-endian (Motorola, MM)
[File] Current IPTC Digest : cdcffa7da8c7be09057076aeaf05c34e
[File] Image Width : 6550
[File] Image Height : 14940
[File] Encoding Process : Baseline DCT, Huffman coding
[File] Bits Per Sample : 8
[File] Color Components : 4
[IFD0] Image Width : 6130
[IFD0] Image Height : 8400
[IFD0] Bits Per Sample : 8 8 8
[IFD0] Photometric Interpretation : RGB
[IFD0] Orientation : Horizontal (normal)
[IFD0] Samples Per Pixel : 3
[IFD0] X Resolution : 180
[IFD0] Y Resolution : 180
[IFD0] Resolution Unit : inches
[IFD0] Software : Adobe Photoshop CS5.1 Macintosh
[IFD0] Modify Date : 2018:08:23 17:32:21
[ExifIFD] Exif Version : 0221
[ExifIFD] Color Space : Uncalibrated
[ExifIFD] Exif Image Width : 6550
[ExifIFD] Exif Image Height : 14940
[IFD1] Compression : JPEG (old-style)
[IFD1] X Resolution : 72
[IFD1] Y Resolution : 72
[IFD1] Resolution Unit : inches
[IFD1] Thumbnail Offset : 394
[IFD1] Thumbnail Length : 2261
[IFD1] Thumbnail Image : (Binary data 2261 bytes, use -b option to extract)
[IPTC] Coded Character Set : UTF8
[IPTC] Application Record Version : 0
[Photoshop] IPTC Digest : cdcffa7da8c7be09057076aeaf05c34e
[Photoshop] X Resolution : 180
[Photoshop] Displayed Units X : inches
[Photoshop] Y Resolution : 180
[Photoshop] Displayed Units Y : inches
[Photoshop] Print Style : Centered
[Photoshop] Print Position : 0 0
[Photoshop] Print Scale : 1
[Photoshop] Global Angle : 30
[Photoshop] Global Altitude : 30
[Photoshop] URL List :
[Photoshop] Slices Group Name : A3-VictoriaGlenManor-RH-Copper-92.4x210.8-R
[Photoshop] Num Slices : 1
[Photoshop] Pixel Aspect Ratio : 1
[Photoshop] Photoshop Thumbnail : (Binary data 2261 bytes, use -b option to extract)
[Photoshop] Has Real Merged Data : Yes
[Photoshop] Writer Name : Adobe Photoshop
[Photoshop] Reader Name : Adobe Photoshop CS5.1
[Photoshop] Photoshop Quality : 12
[Photoshop] Photoshop Format : Standard
[Photoshop] Progressive Scans : 3 Scans
[XMP-x] XMP Toolkit : Adobe XMP Core 5.0-c061 64.140949, 2010/12/07-10:57:01
[XMP-xmp] Modify Date : 2018:08:23 17:32:21+02:00
[XMP-xmp] Creator Tool : Adobe Photoshop CS5.1 Macintosh
[XMP-xmp] Create Date : 2018:08:21 15:12:04+02:00
[XMP-xmp] Metadata Date : 2018:08:23 17:32:21+02:00
[XMP-crs] Already Applied : True
[XMP-photoshop] Color Mode : CMYK
[XMP-photoshop] ICC Profile Name : U.S. Web Coated (SWOP) v2
[XMP-dc] Format : image/jpeg
[XMP-xmpMM] Instance ID : xmp.iid:9F9A62F1B5206811BF6AFA75AB99E0BD
[XMP-xmpMM] Document ID : xmp.did:9E9A62F1B5206811BF6AFA75AB99E0BD
[XMP-xmpMM] Original Document ID : xmp.did:9E9A62F1B5206811BF6AFA75AB99E0BD
[XMP-xmpMM] History Action : saved, saved
[XMP-xmpMM] History Instance ID : xmp.iid:9E9A62F1B5206811BF6AFA75AB99E0BD, xmp.iid:9F9A62F1B5206811BF6AFA75AB99E0BD
[XMP-xmpMM] History When : 2018:08:23 17:32:21+02:00, 2018:08:23 17:32:21+02:00
[XMP-xmpMM] History Software Agent : Adobe Photoshop CS5.1 Macintosh, Adobe Photoshop CS5.1 Macintosh
[XMP-xmpMM] History Changed : /, /
[ICC-header] Profile CMM Type : Adobe Systems Inc.
[ICC-header] Profile Version : 2.1.0
[ICC-header] Profile Class : Output Device Profile
[ICC-header] Color Space Data : CMYK
[ICC-header] Profile Connection Space : Lab
[ICC-header] Profile Date Time : 2000:07:26 05:41:53
[ICC-header] Profile File Signature : acsp
[ICC-header] Primary Platform : Apple Computer Inc.
[ICC-header] CMM Flags : Not Embedded, Independent
[ICC-header] Device Manufacturer : Adobe Systems Inc.
[ICC-header] Device Model :
[ICC-header] Device Attributes : Reflective, Glossy, Positive, Color
[ICC-header] Rendering Intent : Media-Relative Colorimetric
[ICC-header] Connection Space Illuminant : 0.9642 1 0.82491
[ICC-header] Profile Creator : Adobe Systems Inc.
[ICC-header] Profile ID : 0
[ICC_Profile] Profile Description : U.S. Web Coated (SWOP) v2
[ICC_Profile] Profile Copyright : Copyright 2000 Adobe Systems, Inc.
[ICC_Profile] Media White Point : 0.7084 0.73595 0.57104
[ICC_Profile] A To B0 : (Binary data 41478 bytes, use -b option to extract)
[ICC_Profile] A To B2 : (Binary data 41478 bytes, use -b option to extract)
[ICC_Profile] A To B1 : (Binary data 41478 bytes, use -b option to extract)
[ICC_Profile] B To A0 : (Binary data 145588 bytes, use -b option to extract)
[ICC_Profile] B To A1 : (Binary data 145588 bytes, use -b option to extract)
[ICC_Profile] B To A2 : (Binary data 145588 bytes, use -b option to extract)
[ICC_Profile] Gamut : (Binary data 37009 bytes, use -b option to extract)
[Adobe] DCT Encode Version : 100
[Adobe] APP14 Flags 0 : [14]
[Adobe] APP14 Flags 1 : (none)
[Adobe] Color Transform : YCCK
[Composite] Image Size : 6550x14940
[Composite] Megapixels : 97.9
答案 0 :(得分:1)
我怀疑Onyx RIPCenter使用72作为默认值(这是常见的默认值),并且通常会读取Photoshop:X/YResolution
来获取DPI。尝试将IFD0:X/YResolution
复制到Photoshop:X/YResolution
或简单地将Photoshop:X/YResolution
设置为180。
在exiftool中,您可以使用
exiftool -Photoshop:*Resolution=180 FILEorDIR
星号是通配符,它允许同时设置XResolution
和YResolution
。将FILEorDIR替换为要处理的文件/目录。此命令创建备份文件。添加-overwrite_original
以禁止创建备份文件。添加-r
以递归到子目录中。