1
votes

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
1
Did you look at "sip" OSX command line tool? It might do what you need. - David H
When you say "8 bit" do you mean per pixel or per sample? - leonbloy
@leonbloy I think I mean the 8 bit per channel, otherwise known as RGBA8888. I am not really good at this... - Mazyod
Well, you are asking how to convert "to a single 8-bit PNG format", it's critical to understand what you mean. Read here. If you mean bits per channel, then there is no 24 bits PNG per channel, as you say in the first paragraph. - leonbloy
When you say "images converted from 16-bit to 8-bit" you seem to be speaking of bits per channel (and the option -depth in convert also means that), but when you speak of images of 8-16-24... well, that's not consistent. Perhaps you could post or link those 8-bit images that "get somewhat corrupted" - leonbloy

1 Answers

3
votes

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