/Güncelleştirme: Kodu MATLAB file exchange adresinde hazırladım. Yayınlanan versiyon OCTAVE ile uyumludur ve bazı belgelerle birlikte gelir.
Bu çözümle ortaya çıktım. Dönüş argümanları yığılmış görüntüler, renk haritası ve saydamlığa karşılık gelen dizinlerdir.
%do not use, instead use: http://www.mathworks.com/matlabcentral/fileexchange/55693-transparentgifread-filename-
function [stack,map,transparent]=transparentGifRead(filename)
if ~exist(filename,'file')
error('file %s does not exist',filename);
end
info=imfinfo(filename);
%Check if color map for all frames is the same
if any(any(any(diff(cat(3,info.ColorTable),[],3))))
error('inconsistent color map')
else
map=info(1).ColorTable;
end
%Check if transparent color for all frames is the same
if any(diff([info.TransparentColor]))
error('inconsistent transparency information')
else
transparent=info(1).TransparentColor-1;
end
import java.io.*
str = javax.imageio.ImageIO.createImageInputStream(java.io.File(filename));
t = javax.imageio.ImageIO.getImageReaders(str);
reader = t.next();
reader.setInput(str);
numframes = reader.getNumImages(true);
for imageix = 1:numframes
data = reader.read(imageix-1).getData();
height = data.getHeight();
width = data.getWidth();
data2 = reader.read(imageix-1).getData().getPixels(0,0,width,height,[]);
if imageix == 1
stack=zeros(height,width,1,numframes,'uint8');
end
%row major vs column major fix
stack(:,:,1,imageix) = reshape(data2,[width height]).';%'
end
str.close();
end
Bazı gösteri kod yeşil şeffaf pikseller renklendirmek için:
[stack,map,transparent]=transparentGifRead('tr.gif');
map(transparent+1,:)=[0,1,0] %offset 1 because uint8 starts at 0 but indices at 1
for frame=1:size(stack,ndims(stack))
imshow(stack(:,:,frame),map);
pause(1/25);
end
ben matlab .gif resim için şeffaflık yönetemez düşünüyorum. Mathworks.com'dan: 'imread (___) ek olarak görüntü şeffaflığını döndürür. Bu sözdizimi yalnızca PNG, CUR ve ICO dosyaları için geçerlidir. ' – obchardon
@obchardon Fark ettim, ancak sonra, bir gif dosyasını alfa bilgisi ile MATLAB'a yükleme yolu var mı? Sadece bir gif dosyası, o kadar zor olamaz –
Imagemagick kullanarak ve PNG'leri bir döngü içinde okuyarak GIF'i PNG'ye dönüştürmeyi önermek istedim. Ancak MATLAB'ın PNG'deki Alpha katmanını tanımasına bile gerek yok, ancak dosyada * var *. :-( – hbaderts