Mobile app version of vmapp.org
Login or Join
Bethany839

: Autoconverting PNGs to sRGB Tools like PNGOUT blithely strip out color profiles (the iCCP chunk), which arguably makes the tools lossy because it changes the appearance of non-sRGB images in nearly

@Bethany839

Posted in: #Images #Optimization

Tools like PNGOUT blithely strip out color profiles (the iCCP chunk), which arguably makes the tools lossy because it changes the appearance of non-sRGB images in nearly all modern browsers.

I've found a solution. Gimp will offer to autoconvert to sRGB when opening an affected image. Saving and using PNGOUT is then perfectly fine. The original and Gimp-assisted recompressed images will give identical screenshots from a browser to the extent that every pixel will have the same RGB value with both image files. This is exactly what I want.

However, I'm dealing with hundreds of images and opening them in Gimp this way and then saving them is not an automated process. How can I automatically properly convert PNGs to the sRGB color profile prior to recompressing them?

Note: I've tried ImageMagick's convert with various sRGB.icc profiles, but every time I've tried it's a bit lossy (like giving #cccdcc instead of #cccccc ) and thus ruins the ability to use PNG's greyscale storage for grey images, both of which are undesired.

10.02% popularity Vote Up Vote Down


Login to follow query

More posts by @Bethany839

2 Comments

Sorted by latest first Latest Oldest Best

 

@Eichhorn212

In your question, you write:


"Tools like PNGOUT blithely strip out color profiles (the iCCP chunk), which arguably makes the tools lossy because it changes the appearance of non-sRGB images in nearly all modern browsers."


While pre-converting the images to sRGB is indeed one solution to this problem, another is to tell PNGOUT to keep the color profile using the -k switch, either like this:

pngout -k1 image.png


or, more specifically:

pngout -kiCCP,gAMA image.png


(I'm assuming that if you want to keep the color profile, you probably also care about the gamma setting. Also, -k works on the Linux version of PNGOUT; if you're on Windows, replace it with /k.)

10% popularity Vote Up Vote Down


 

@Sherry646

I finally solved it.

I'd used the ICC profiles available on the ICC's website, which was strangely enough a mistake, since they introduce the errors I mentioned in the question.

GraphicsMagick (slightly lossy)

GraphicsMagick does this in a very slightly lossy method (brighter colors are reduced by one, like from #cccccc to #cbcbcb ). However, this doesn't ruin greys and allows for better recompression.

Since this is likely the easier method to apply if strict perfection isn't needed, I've included it. Get a proper sRGB ICC profile, like the one in the assorted profiles pack offered by Little CMS or the one included with Ghostscript, and run the following:

gm convert in.png -profile /path/to/srgb.icc -strip out.png


Gimp automation (non-lossy)

After I found that GraphicsMagick was inexact, I worked out a Script-Fu script which uses Gimp's exact method. To prepare to use it, save the following contents to ~/.gimp-2.8/scripts/png-to-srgb.scm

(define (png-to-srgb pattern)
(let* (
(filelist (cadr (file-glob pattern 1)))
)
(while (not (null? filelist))
(let* (
(filename (car filelist))
(image (car (file-png-load RUN-NONINTERACTIVE filename filename)))
)
(begin
(plug-in-icc-profile-apply-rgb RUN-NONINTERACTIVE image 0 0)
(file-png-save2 RUN-NONINTERACTIVE
image (car (gimp-image-get-active-drawable image))
filename filename
0 9 0 0 0 0 0 0 0)
(gimp-image-delete image)
(set! filelist (cdr filelist))
)
)
)
)
)


Then the conversion can be accomplished with the following:

gimp-console -i -d -f -b '(png-to-srgb "file.png")' -b '(gimp-quit 0)'


This does not allow separate input and output filenames because it can be replaced with *.png if desired.

10% popularity Vote Up Vote Down


Back to top | Use Dark Theme