Прозрачность достигается за счет использования альфа-канала;Ваше изображение состоит из пикселей, каждый из которых состоит из значения красного, зеленого и синего, а также значения прозрачности (= альфа).
Вы можете указать свой альфа-канал при записи файла,
imwrite(Image, 'filename.png', 'Alpha', AlphaMatrix)
, где Image
- это массив R x C x 3
, а AlphaMatrix
- это матрица R x C
.(R
и C
- размеры изображения) Image
содержит значения RGB, в то время как AlphaMatrix
содержит значения альфа.
Достаточно объяснений - вот пример.Вам нужен файл jpg
;это напишет png
файл с прозрачностью градиента.То есть он будет полностью прозрачным слева и полностью непрозрачным справа.
I = imread('a.jpg');
imwrite(I, 'a.png', 'Alpha', ...
repmat((1:size(I,2))/size(I,2), [size(I, 1) 1]));
В вашем случае вам нужно только заполнить непрозрачные части значением 1, а прозрачные значения -0. Обратите внимание на тип данных вашего массива - если это uint8
или uint16
, все значения должны находиться в диапазоне [0..255]
.Если это double
, оно должно быть в диапазоне [0..1]
.
Один из способов сделать это -
- После
imresize
преобразовать container
в double
: container = double(container);
. padarray
с помощьюNaN
: padarray(container, [0 floor(...)], nan, 'pre');
Заполнить альфа-канал 0, где container
имеет NaN
, в противном случае 1:
alpha = uint8(ones(size(container)));
alpha(isnan(container)) = 0;
Исправитьcontainer
должно быть uint8
и не содержать NaN
s:
container(isnan(container(:,:,1))) = 0;
container = uint8(container);
(надеюсь, кто-нибудь может предложить более красивое решение ...)