Problem obtaining alpha channel of pngquant/tinypng files.
3 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Ernest Woei
el 13 de Feb. de 2017
Comentada: Walter Roberson
el 22 de Feb. de 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 comentarios
Saurabh Gupta
el 17 de Feb. de 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?
Respuesta aceptada
Walter Roberson
el 17 de Feb. de 2017
Editada: Walter Roberson
el 22 de Feb. de 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 comentarios
Más respuestas (0)
Ver también
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

