Problem obtaining alpha channel of pngquant/tinypng files.
2 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Ernest Woei
il 13 Feb 2017
Commentato: Walter Roberson
il 22 Feb 2017
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
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?
Risposta accettata
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
Più risposte (0)
Vedere anche
Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

