Problem obtaining alpha channel of pngquant/tinypng files.

2 visualizzazioni (ultimi 30 giorni)
I am having trouble obtaining the alpha channel of a pngquant/tinypng file using imread. Is there another function that handles this properly?
Used:
[img,imgMap,imgAlpha] = imread('some_pngquant_file.png');
img (mxn uint8 matrix), imgMap (256x3 double matrix with values in [0,1]), imgAlpha is empty
img entries index into imgMap rows (RGB values in [0,1]). Could it be that I'm interpreting this improperly?
  2 Commenti
Saurabh Gupta
Saurabh Gupta il 17 Feb 2017
The imread documentation says "For PNG files, transparency is the alpha channel, if present. If no alpha channel is present, ... then transparency is []."
Are you sure your image file has an alpha channel?
Ernest Woei
Ernest Woei il 21 Feb 2017
Yes, unless the image viewer is creating a transparency layer on its own, which I doubt.
Upon opening the pngquant'ed file in Photoshop. I can view the transparency layer, i.e., select layer, Menu: Layer -> Layer Mask -> From Transparency, then viewing the mask channel through the 'Channels' tab.

Accedi per commentare.

Risposta accettata

Walter Roberson
Walter Roberson il 17 Feb 2017
Modificato: Walter Roberson il 22 Feb 2017
The sample "Firefox logo" image I found that had been created by the open source library did not have an Alpha channel. Instead, imfinfo says that 'Transparency' is 'simple' and there is a SimpleTransparencyData property that appears to give some kind of alpha mapping. The PNG specification does not permit true Alpha channels for indexed (pseudocolor) images.
Looking at http://www.libpng.org/pub/png/book/chapter08.html#png.ch08.div.5.2 the implication is that all entries past the end of the provided SimpleTransparencyData are the maximum (fully opaque.)
This leads to:
filename = 'NameOftinyPNG.png';
minfo = imfinfo(filename);
ACHAN = mfinfo.SimpleTransparencyData;
ACHAN(end+1:256) = 1;
[img, imgMap] = imread(filename);
AMAP = ACHAN(double(img)+1);
image(img, 'AlphaData', AMAP);
colormap(imgMap);
  3 Commenti
Walter Roberson
Walter Roberson il 22 Feb 2017
Thanks, I have corrected my typo for future reference.

Accedi per commentare.

Più risposte (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by