Plot 在从倍频程导出的绘图中具有透明背景

Plot 在从倍频程导出的绘图中具有透明背景,plot,background,octave,transparency,Plot,Background,Octave,Transparency,我在Win 10下使用便携式倍频程5.1.0。 我的意思是写一个带有透明背景的png绘图 免责声明: 这个问题类似于下面链接的两个问题。 我之所以选择,是因为我正在添加更多的相关信息(出于同样的原因,下面的问题#2不是#1的翻版) 这就是我发现的: print(gcf,'-dpngalpha,'-myplot.png'),在中建议。 值得注意的是,我没有找到关于此选项的文档 对我来说有几个问题:1)由于一些未知的原因,convert什么都不做。2) 外部软件包的要求使它变得很麻烦。例如,我不能

我在Win 10下使用便携式倍频程5.1.0。 我的意思是写一个带有透明背景的png绘图

免责声明: 这个问题类似于下面链接的两个问题。 我之所以选择,是因为我正在添加更多的相关信息(出于同样的原因,下面的问题#2不是#1的翻版)

这就是我发现的:

  • print(gcf,'-dpngalpha,'-myplot.png'),在中建议。
    值得注意的是,我没有找到关于此选项的文档

  • 对我来说有几个问题:1)由于一些未知的原因,
    convert
    什么都不做。2) 外部软件包的要求使它变得很麻烦。例如,我不能简单地将我的八度代码发送给其他人让他使用

  • 选项
    svgconvert
    是我找到的唯一选项。 但它不适用于png,例如

  • 似乎有能力以透明方式写入,但我找不到一种方法将绘图转换为适合
    imwrite
    的图像。 (另见)。 也许这是一条可能的路线

  • 有八度音阶的选项吗?

    相关的


  • imwrite
    选项似乎有效。首先创建图像文件
    img\u fname
    ,然后为其创建alpha层

    想知道是否可以避免中间的不透明文件是很有意思的

    编辑: 我设法直接从绘图创建图像,而不需要中间文件

    x = -10:0.1:10;
    plot (x, sin (x));
    # Print figure directly to image instead of file
    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, 'temp.png', 'Alpha', alpha);
    
    注释

  • 通过一个简单的代数,可以为任意数量的颜色添加透明度,并为每种颜色添加任何不透明度级别。 此外,可以将其转化为函数

  • im
    tcolor
    的乘法也可以矢量化

  • 相关的


    这是否回答了您的问题?不。正如我的问题中提到的,至少对我来说,这不起作用。据我所知,直到最近,适当的透明度处理一直是一个还在开发的功能。我认为这可能在即将发布的版本6中起作用。但5.1.0绝对不是这样。然而,有很多方法可以通过额外的努力来实现这种效果(例如,生成所需的层,然后与imagemagick或gimp脚本等进行外部组合)。(顺便说一句,这是我自己的轶事经历,我不是octave开发人员)。但我已经用这种方法制作了很多次透明的png图形。事实上,我在过去回答过类似的问题:中间文件是什么意思?这里似乎没有一个。@TasosPapastylianou-我正好完成了这一点。请看更新的答案。啊,是的。这也是我要评论的。使用imwrite保存到RGBA png是很好的(并且在发现它方面做得很好)。不太受支持的是直接保存绘图本身,尤其是创建具有透明度的图层。(但是,仔细看,你并没有要求那样做)。RGBImage开关是一个很好的发现!我没有意识到这一点+1:)@TasosPapastylianou-仍然需要用向量化
    im
    tcolor
    的乘法来结束这个过程。