Image 打印/保存打印为png文件,并以倍频程显示alpha通道问题

Image 打印/保存打印为png文件,并以倍频程显示alpha通道问题,image,octave,Image,Octave,如何使用alpha通道将打印/保存为png文件 我试过了 我使用的是Octave 4.2.2、Ubuntu 18.04 64位和图形工具包fltk t = [0:0.01:2*pi]; x = sin (t); plot (t, x); set(gcf, 'Position', [10, 10, 500, 500]); print(gcf,'-dpngalpha', 'myplot.png'); 我犯了一个错误 错误:打印:未知设备pngalpha 错误:从调用 在第265行第5列打印解析

如何使用alpha通道将打印/保存为png文件

我试过了

我使用的是Octave 4.2.2、Ubuntu 18.04 64位和图形工具包fltk

t = [0:0.01:2*pi]; x = sin (t);
plot (t, x);
set(gcf, 'Position',  [10, 10, 500, 500]);
print(gcf,'-dpngalpha', 'myplot.png');
我犯了一个错误 错误:打印:未知设备pngalpha 错误:从调用 在第265行第5列打印解析选项 在第8列第316行打印

请注意:Octave在5.2上,这个问题在下面有一个解决办法…

(更新:在这里也可以看到Sancho的好答案:)


一般来说,在倍频程中增加透明度仍然不完全受支持。我的建议是正常生成图像,并使用外部工具增加透明度(如果您希望它成为脚本的一部分,可以通过
系统
函数从倍频程内调用)

imagemagick套件可以通过convert命令执行您想要的操作,例如:

convert myplot.png-fuzz 50%透明白色myplot\u transparent.png
(摘自)

如果您希望生成多个“层”,其中一些层具有透明度,然后将其覆盖(这可能是您首先想要透明度的原因),您也可以通过以下方式通过imagemagick执行此操作:

convert bottomlayer.png toplayer.png-compose over-composite out.png
因此,一个完整的八度音阶示例可能如下所示:

t=[0:0.01:2*pi];
%创建底层(不需要透明度)
图(t,sin(t),'r','linewidth',3);
集合(gcf,‘位置’,[10,10,500,500]);
轴([-1,7,-1,1]);
集合(gca,‘位置’,[0.1,0.1,0.8,0.8]);
saveas(gcf,'bottom.png');
%创建顶层并使其透明(通过imagemagick)
图(t,cos(t),'g','linewidth',3);
集合(gcf,‘位置’,[10,10,500,500]);
轴([-1,7,-1,1]);
轴断开;
集合(gca,‘位置’,[0.1,0.1,0.8,0.8]);
saveas(gcf,'top.png');
系统('convert top.png-fuzz 10%-透明白色top.png');
%结合层
系统('convert bottom.png top.png-compose-over-composite result.png');
%以八度音阶形象化结果
imshow result.png
结果图像:


现在还不清楚您是想简单地生成一个具有透明背景的文件,还是想处理图像文件的任意alpha通道的更一般情况

幸运的是,倍频程似乎也能处理第二种情况。 如前所述,, 图像或轴对象不实现透明度,但使用alpha通道将图像写入文件似乎工作正常,至少在版本5.1.0中是这样

因此,这将为白色生成一个透明的alpha通道(
tcolor=[255]


哪种图形在哪种操作系统上使用?@Andy我使用的是Octave 4.2.2、Ubuntu 18.04 64位和graphics_toolkit fltkI,我想知道为什么你说“在Octave中增加透明度仍然不完全受支持”。了解您所指的版本会很有趣。如果有任何例子可以引用这种缺乏全面支持的情况。@sancho.srinstatemonicacellio这是一个缓慢实现的功能,但是文档中的一些地方提到了对特定区域缺乏全面透明度支持:例如,对于图像或轴对象,没有实现see和I see透明度。但使用alpha通道将图像写入文件似乎工作正常,至少在我的5.1.0中是这样。这不是一个微小的区别,可能值得在答案中澄清。。。将把它添加到一个答案中。@sancho.srestemonicacellio更好的是,我刚才在你的帖子中添加了一个参考:)
im = print(gcf, '-RGBImage');
tcolor = [255 255 255];
alpha(:,:) = 255 * ( 1 - (im(:,:,1) == tcolor(1)) .* (im(:,:,2) == tcolor(2)) .* (im(:,:,3) == tcolor(3)) );
imwrite(im, 'myplot.png', 'Alpha', alpha);