iosopengl-esimagemagickpngpng-8

Imagemagick lower PNG depth


I have a huge number of images provided from various artists working on a project. The images have varying specs, but all are PNGs. Some are 8-bit indexed (palette), others are true color with alpha 32-bit and 64-bit PNGs.

Now, I am trying to use imagemagick to push all these images to a single coherent format, but I am facing a painful issue. I noticed that images that have been converted from truecolor with alpha (16-bit channel depth) work like a charm. However, 8-bit per channel images, or possibly lower/higher images get somewhat corrupted and the rendering engine (on iOS) we have will not display the images properly.

Is there a way to simply convert all images robustly to a single 8-bit per channel truecolor with alpha PNG format (RGBA8888)?

(NOTE: I read in the wikipedia link true color & alpha is at least 32 bits per channel, I need to reduce the depth by trimming it to reduce the file size. The rendering engine will also take care of that.)

I tried the following commands:

/opt/local/bin/convert -depth 8 {} {}
/opt/local/bin/convert {} -depth 8 {}
/opt/local/bin/convert {} -colorspace sRGB -depth 8 {}
/opt/local/bin/convert {} -type truecolormatte -depth 8 {}

Here are two images from running the last command, the second one doesn't run on the engine:

Image: bu_hu_townhall_l01.png
  Format: PNG (Portable Network Graphics)
  Class: DirectClass
  Geometry: 640x558+0+0
  Resolution: 28.35x28.35
  Print size: 22.575x19.6825
  Units: PixelsPerCentimeter
  Type: TrueColorAlpha
  Endianess: Undefined
  Colorspace: sRGB
  Depth: 8-bit
  Channel depth:
    red: 8-bit
    green: 8-bit
    blue: 8-bit
    alpha: 8-bit
  Channel statistics:
    Red:
      min: 0 (0)
      max: 255 (1)
      mean: 207.468 (0.8136)
      standard deviation: 60.7017 (0.238046)
      kurtosis: 1.18939
      skewness: -1.39109
    Green:
      min: 0 (0)
      max: 255 (1)
      mean: 205.419 (0.805565)
      standard deviation: 56.0321 (0.219734)
      kurtosis: 1.15995
      skewness: -1.22368
    Blue:
      min: 0 (0)
      max: 255 (1)
      mean: 174.337 (0.683673)
      standard deviation: 79.2051 (0.310608)
      kurtosis: -0.8628
      skewness: -0.578582
    Alpha:
      min: 0 (0)
      max: 255 (1)
      mean: 96.4893 (0.37839)
      standard deviation: 123.454 (0.484134)
      kurtosis: -1.74557
      skewness: -0.501528
  Image statistics:
    Overall:
      min: 0 (0)
      max: 255 (1)
      mean: 186.434 (0.731112)
      standard deviation: 84.1704 (0.33008)
      kurtosis: 0.210139
      skewness: -1.19818
  Alpha: srgba(255,255,255,0)   #FFFFFF00
  Rendering intent: Perceptual
  Gamma: 0.45455
  Chromaticity:
    red primary: (0.63999,0.33001)
    green primary: (0.3,0.6)
    blue primary: (0.15,0.05999)
    white point: (0.31269,0.32899)
  Background color: white
  Border color: srgba(223,223,223,1)
  Matte color: grey74
  Transparent color: none
  Interlace: None
  Intensity: Undefined
  Compose: Over
  Page geometry: 640x558+0+0
  Dispose: Undefined
  Iterations: 0
  Compression: Zip
  Orientation: Undefined
  Properties:
    date:create: 2013-07-19T12:48:10-07:00
    date:modify: 2013-07-19T12:48:10-07:00
    png:bKGD: chunk was found (see Background color, above)
    png:cHRM: chunk was found (see Chromaticity, above)
    png:gAMA: gamma=0.45454544 (See Gamma, above)
    png:IHDR.bit-depth-orig: 8
    png:IHDR.bit_depth: 8
    png:IHDR.color-type-orig: 6
    png:IHDR.color_type: 6 (RGBA)
    png:IHDR.interlace_method: 0 (Not interlaced)
    png:IHDR.width,height: 640, 558
    png:pHYs: x_res=2835, y_res=2835, units=1
    png:sRGB: intent=0 (Perceptual Intent)
    png:text: 2 tEXt/zTXt/iTXt chunks were found
    signature: 547acae3cbfddef87d1ec49fb4dbe259772343ed121a8f9bfe2f1846fc542cf0
  Artifacts:
    filename: bu_hu_townhall_l01.png
    verbose: true
  Tainted: False
  Filesize: 333KB
  Number pixels: 357K
  Pixels per second: 17.86MB
  User time: 0.010u
  Elapsed time: 0:01.019
  Version: ImageMagick 6.8.6-0 2013-07-03 Q16 http://www.imagemagick.org

And...

Image: red_circle.png
  Format: PNG (Portable Network Graphics)
  Class: DirectClass
  Geometry: 256x256+0+0
  Resolution: 28.35x28.35
  Print size: 9.02998x9.02998
  Units: PixelsPerCentimeter
  Type: PaletteAlpha
  Endianess: Undefined
  Colorspace: sRGB
  Depth: 8-bit
  Channel depth:
    red: 1-bit
    green: 1-bit
    blue: 1-bit
    alpha: 8-bit
  Channel statistics:
    Red:
      min: 255 (1)
      max: 255 (1)
      mean: 255 (1)
      standard deviation: 0 (0)
      kurtosis: 0
      skewness: 0
    Green:
      min: 0 (0)
      max: 0 (0)
      mean: 0 (0)
      standard deviation: 0 (0)
      kurtosis: 0
      skewness: 0
    Blue:
      min: 0 (0)
      max: 0 (0)
      mean: 0 (0)
      standard deviation: 0 (0)
      kurtosis: 0
      skewness: 0
    Alpha:
      min: 0 (0)
      max: 40 (0.156863)
      mean: 6.30113 (0.0247103)
      standard deviation: 10.7071 (0.0419887)
      kurtosis: 1.47694
      skewness: -1.66221
  Image statistics:
    Overall:
      min: 0 (0)
      max: 255 (1)
      mean: 125.925 (0.493822)
      standard deviation: 5.35356 (0.0209944)
      kurtosis: 309547
      skewness: 77.6945
  Alpha: srgba(255,0,0,0)   #FF000000
  Colors: 41
  Histogram:
     37164: (255,  0,  0,  0) #FF000000 srgba(255,0,0,0)
      4416: (255,  0,  0,  1) #FF000001 srgba(255,0,0,0.00392157)
      1974: (255,  0,  0,  2) #FF000002 srgba(255,0,0,0.00784314)
      1394: (255,  0,  0,  4) #FF000004 srgba(255,0,0,0.0156863)
      1154: (255,  0,  0,  5) #FF000005 srgba(255,0,0,0.0196078)
       982: (255,  0,  0,  8) #FF000008 srgba(255,0,0,0.0313725)
       942: (255,  0,  0,  7) #FF000007 srgba(255,0,0,0.027451)
       893: (255,  0,  0, 10) #FF00000A srgba(255,0,0,0.0392157)
       758: (255,  0,  0,  3) #FF000003 srgba(255,0,0,0.0117647)
       754: (255,  0,  0, 11) #FF00000B srgba(255,0,0,0.0431373)
       752: (255,  0,  0, 14) #FF00000E srgba(255,0,0,0.054902)
       749: (255,  0,  0, 13) #FF00000D srgba(255,0,0,0.0509804)
       698: (255,  0,  0, 16) #FF000010 srgba(255,0,0,0.0627451)
       684: (255,  0,  0, 17) #FF000011 srgba(255,0,0,0.0666667)
       657: (255,  0,  0, 19) #FF000013 srgba(255,0,0,0.0745098)
       636: (255,  0,  0, 20) #FF000014 srgba(255,0,0,0.0784314)
       635: (255,  0,  0, 38) #FF000026 srgba(255,0,0,0.14902)
       630: (255,  0,  0, 32) #FF000020 srgba(255,0,0,0.12549)
       604: (255,  0,  0, 23) #FF000017 srgba(255,0,0,0.0901961)
       598: (255,  0,  0, 26) #FF00001A srgba(255,0,0,0.101961)
       589: (255,  0,  0, 28) #FF00001C srgba(255,0,0,0.109804)
       574: (255,  0,  0, 34) #FF000022 srgba(255,0,0,0.133333)
       574: (255,  0,  0, 31) #FF00001F srgba(255,0,0,0.121569)
       568: (255,  0,  0, 22) #FF000016 srgba(255,0,0,0.0862745)
       551: (255,  0,  0, 29) #FF00001D srgba(255,0,0,0.113725)
       542: (255,  0,  0,  6) #FF000006 srgba(255,0,0,0.0235294)
       541: (255,  0,  0, 25) #FF000019 srgba(255,0,0,0.0980392)
       516: (255,  0,  0, 37) #FF000025 srgba(255,0,0,0.145098)
       485: (255,  0,  0, 35) #FF000023 srgba(255,0,0,0.137255)
       387: (255,  0,  0,  9) #FF000009 srgba(255,0,0,0.0352941)
       381: (255,  0,  0, 12) #FF00000C srgba(255,0,0,0.0470588)
       327: (255,  0,  0, 36) #FF000024 srgba(255,0,0,0.141176)
       327: (255,  0,  0, 24) #FF000018 srgba(255,0,0,0.0941176)
       326: (255,  0,  0, 15) #FF00000F srgba(255,0,0,0.0588235)
       316: (255,  0,  0, 21) #FF000015 srgba(255,0,0,0.0823529)
       305: (255,  0,  0, 18) #FF000012 srgba(255,0,0,0.0705882)
       304: (255,  0,  0, 27) #FF00001B srgba(255,0,0,0.105882)
       270: (255,  0,  0, 33) #FF000021 srgba(255,0,0,0.129412)
       254: (255,  0,  0, 30) #FF00001E srgba(255,0,0,0.117647)
       251: (255,  0,  0, 39) #FF000027 srgba(255,0,0,0.152941)
        74: (255,  0,  0, 40) #FF000028 srgba(255,0,0,0.156863)
  Rendering intent: Perceptual
  Gamma: 0.454545
  Chromaticity:
    red primary: (0.64733,0.33636)
    green primary: (0.28904,0.6052)
    blue primary: (0.1235,0.0424)
    white point: (0.28021,0.296)
  Background color: white
  Border color: srgba(223,223,223,1)
  Matte color: grey74
  Transparent color: none
  Interlace: None
  Intensity: Undefined
  Compose: Over
  Page geometry: 256x256+0+0
  Dispose: Undefined
  Iterations: 0
  Compression: Zip
  Orientation: Undefined
  Properties:
    date:create: 2013-07-19T12:48:29-07:00
    date:modify: 2013-07-19T12:48:29-07:00
    png:bKGD: chunk was found (see Background color, above)
    png:cHRM: chunk was found (see Chromaticity, above)
    png:iCCP: chunk was found
    png:IHDR.bit-depth-orig: 8
    png:IHDR.bit_depth: 8
    png:IHDR.color-type-orig: 3
    png:IHDR.color_type: 3 (Indexed)
    png:IHDR.interlace_method: 0 (Not interlaced)
    png:IHDR.width,height: 256, 256
    png:pHYs: x_res=2835, y_res=2835, units=1
    png:PLTE.number_colors: 42
    png:text: 2 tEXt/zTXt/iTXt chunks were found
    png:tRNS: chunk was found
    signature: f41a73e5fe161c06aa147572380ab95b6e43a411fa533b6533af37e2d19a161e
  Profiles:
    Profile-icc: 3224 bytes
      Description: Display
      Manufacturer: Display
      Model: Display
      Copyright: Copyright Apple, Inc., 2013
  Artifacts:
    filename: red_circle.png
    verbose: true
  Tainted: False
  Filesize: 8.44KB
  Number pixels: 65.5K
  Pixels per second: 0B
  User time: 0.000u
  Elapsed time: 0:01.000
  Version: ImageMagick 6.8.6-0 2013-07-03 Q16 http://www.imagemagick.org

This is how it was before it got corrupted:

Image: red_circle.png
  Format: PNG (Portable Network Graphics)
  Class: DirectClass
  Geometry: 256x256+0+0
  Resolution: 28.35x28.35
  Print size: 9.02998x9.02998
  Units: PixelsPerCentimeter
  Type: PaletteAlpha
  Endianess: Undefined
  Colorspace: sRGB
  Depth: 8-bit
  Channel depth:
    red: 1-bit
    green: 1-bit
    blue: 1-bit
    alpha: 8-bit
  Channel statistics:
    Red:
      min: 255 (1)
      max: 255 (1)
      mean: 255 (1)
      standard deviation: 0 (0)
      kurtosis: 0
      skewness: 0
    Green:
      min: 0 (0)
      max: 0 (0)
      mean: 0 (0)
      standard deviation: 0 (0)
      kurtosis: 0
      skewness: 0
    Blue:
      min: 0 (0)
      max: 0 (0)
      mean: 0 (0)
      standard deviation: 0 (0)
      kurtosis: 0
      skewness: 0
    Alpha:
      min: 0 (0)
      max: 40 (0.156863)
      mean: 6.30113 (0.0247103)
      standard deviation: 10.7071 (0.0419887)
      kurtosis: 1.47694
      skewness: -1.66221
  Image statistics:
    Overall:
      min: 0 (0)
      max: 255 (1)
      mean: 125.925 (0.493822)
      standard deviation: 5.35356 (0.0209944)
      kurtosis: 309547
      skewness: 77.6945
  Alpha: srgba(255,0,0,0)   #FF000000
  Colors: 41
  Histogram:
     37164: (255,  0,  0,  0) #FF000000 srgba(255,0,0,0)
      4416: (255,  0,  0,  1) #FF000001 srgba(255,0,0,0.00392157)
      1974: (255,  0,  0,  2) #FF000002 srgba(255,0,0,0.00784314)
      1394: (255,  0,  0,  4) #FF000004 srgba(255,0,0,0.0156863)
      1154: (255,  0,  0,  5) #FF000005 srgba(255,0,0,0.0196078)
       982: (255,  0,  0,  8) #FF000008 srgba(255,0,0,0.0313725)
       942: (255,  0,  0,  7) #FF000007 srgba(255,0,0,0.027451)
       893: (255,  0,  0, 10) #FF00000A srgba(255,0,0,0.0392157)
       758: (255,  0,  0,  3) #FF000003 srgba(255,0,0,0.0117647)
       754: (255,  0,  0, 11) #FF00000B srgba(255,0,0,0.0431373)
       752: (255,  0,  0, 14) #FF00000E srgba(255,0,0,0.054902)
       749: (255,  0,  0, 13) #FF00000D srgba(255,0,0,0.0509804)
       698: (255,  0,  0, 16) #FF000010 srgba(255,0,0,0.0627451)
       684: (255,  0,  0, 17) #FF000011 srgba(255,0,0,0.0666667)
       657: (255,  0,  0, 19) #FF000013 srgba(255,0,0,0.0745098)
       636: (255,  0,  0, 20) #FF000014 srgba(255,0,0,0.0784314)
       635: (255,  0,  0, 38) #FF000026 srgba(255,0,0,0.14902)
       630: (255,  0,  0, 32) #FF000020 srgba(255,0,0,0.12549)
       604: (255,  0,  0, 23) #FF000017 srgba(255,0,0,0.0901961)
       598: (255,  0,  0, 26) #FF00001A srgba(255,0,0,0.101961)
       589: (255,  0,  0, 28) #FF00001C srgba(255,0,0,0.109804)
       574: (255,  0,  0, 34) #FF000022 srgba(255,0,0,0.133333)
       574: (255,  0,  0, 31) #FF00001F srgba(255,0,0,0.121569)
       568: (255,  0,  0, 22) #FF000016 srgba(255,0,0,0.0862745)
       551: (255,  0,  0, 29) #FF00001D srgba(255,0,0,0.113725)
       542: (255,  0,  0,  6) #FF000006 srgba(255,0,0,0.0235294)
       541: (255,  0,  0, 25) #FF000019 srgba(255,0,0,0.0980392)
       516: (255,  0,  0, 37) #FF000025 srgba(255,0,0,0.145098)
       485: (255,  0,  0, 35) #FF000023 srgba(255,0,0,0.137255)
       387: (255,  0,  0,  9) #FF000009 srgba(255,0,0,0.0352941)
       381: (255,  0,  0, 12) #FF00000C srgba(255,0,0,0.0470588)
       327: (255,  0,  0, 36) #FF000024 srgba(255,0,0,0.141176)
       327: (255,  0,  0, 24) #FF000018 srgba(255,0,0,0.0941176)
       326: (255,  0,  0, 15) #FF00000F srgba(255,0,0,0.0588235)
       316: (255,  0,  0, 21) #FF000015 srgba(255,0,0,0.0823529)
       305: (255,  0,  0, 18) #FF000012 srgba(255,0,0,0.0705882)
       304: (255,  0,  0, 27) #FF00001B srgba(255,0,0,0.105882)
       270: (255,  0,  0, 33) #FF000021 srgba(255,0,0,0.129412)
       254: (255,  0,  0, 30) #FF00001E srgba(255,0,0,0.117647)
       251: (255,  0,  0, 39) #FF000027 srgba(255,0,0,0.152941)
        74: (255,  0,  0, 40) #FF000028 srgba(255,0,0,0.156863)
  Rendering intent: Perceptual
  Gamma: 0.454545
  Chromaticity:
    red primary: (0.64733,0.33636)
    green primary: (0.28904,0.6052)
    blue primary: (0.1235,0.0424)
    white point: (0.28021,0.296)
  Background color: white
  Border color: srgba(223,223,223,1)
  Matte color: grey74
  Transparent color: none
  Interlace: None
  Intensity: Undefined
  Compose: Over
  Page geometry: 256x256+0+0
  Dispose: Undefined
  Iterations: 0
  Compression: Zip
  Orientation: Undefined
  Properties:
    date:create: 2013-07-18T20:55:49-07:00
    date:modify: 2013-07-18T20:55:49-07:00
    png:cHRM: chunk was found (see Chromaticity, above)
    png:iCCP: chunk was found
    png:IHDR.bit-depth-orig: 8
    png:IHDR.bit_depth: 8
    png:IHDR.color-type-orig: 6
    png:IHDR.color_type: 6 (RGBA)
    png:IHDR.interlace_method: 0 (Not interlaced)
    png:IHDR.width,height: 256, 256
    png:pHYs: x_res=2835, y_res=2835, units=1
    signature: f41a73e5fe161c06aa147572380ab95b6e43a411fa533b6533af37e2d19a161e
  Profiles:
    Profile-icc: 3224 bytes
      Description: Display
      Manufacturer: Display
      Model: Display
      Copyright: Copyright Apple, Inc., 2013
  Artifacts:
    filename: red_circle.png
    verbose: true
  Tainted: False
  Filesize: 11.2KB
  Number pixels: 65.5K
  Pixels per second: 0B
  User time: 0.000u
  Elapsed time: 0:01.000
  Version: ImageMagick 6.8.6-0 2013-07-03 Q16 http://www.imagemagick.org

Solution

  • If you are using ImageMagick, you can force the images to be written as RGBA8888 PNG with

     /opt/local/bin/convert input.png png32:output.png