图像的DPI信息到底存储在什么地方(Exif除外)?

时间:2018-09-01 19:49:18

标签: python-imaging-library exif dpi exiftool

几年来,我们一直在使用一个名为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

1 个答案:

答案 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

星号是通配符,它​​允许同时设置XResolutionYResolution。将FILEorDIR替换为要处理的文件/目录。此命令创建备份文件。添加-overwrite_original以禁止创建备份文件。添加-r以递归到子目录中。