gnuplot:如何使用像素图显示透明png

gnuplot: How to display transparent png with pixmap

提问人:Marionette_66 提问时间:10/26/2023 最后编辑:Marionette_66 更新时间:10/26/2023 访问量:72

问:

我正在尝试使用命令将图像 (png) 放置在地图顶部。set pixmap

pixmap displayed on Map

它确实有效,但 png 的透明度没有被“显示”,我得到了一个白色背景。

该功能是否可以处理图像的透明度属性?pixmap

脚本如下:

$DATA<<EOD
1,"Washington",630.2000,1591.1800
EOD
$DATA01<<EOD
1 "C:\\Temp\\Images\\colors.png" 630.2000 1591.1800
EOD
set datafile separator comma
set style data point
set term windows enhanced size 3000.00,2000.00
unset xtics; unset ytics; unset x2tics; unset y2tics
set grid noxtics
set grid noytics
set border 0
set colorsequence classic
set key off
set for [i=1:1] pixmap i word($DATA01[i], 2) center at word($DATA01[i], 3), word($DATA01[i], 4) width 100 height 100 
plot 'C:\Magic\XPA\46s\Add_On\ChartGenerator\Geography\USA_Curved_Names_Blue.png.jpg' binary filetype=JPG w rgbimage,\
$DATA every ::0::0 using ($3):($4) notitle,\
$DATA using ($3):($4):($2) with labels font "Tahoma,20" textcolor rgb "purple" center offset 0,1 notitle

这是PNG文件:sample png file

和映射文件:enter image description here

罗伯托

GnuPlot 透明度 像素图

评论

0赞 theozh 10/26/2023
请提供您当前的脚本和“透明”PNG。
0赞 Marionette_66 10/26/2023
@theoz,我刚刚用脚本和示例 png 文件更新了问题。谢谢
0赞 theozh 10/26/2023
感谢您添加脚本和 PNG。我尝试了几件事,但还没有成功。
0赞 theozh 10/26/2023
你的PNG来自哪里?哪个应用程序生成了您的 PNG?
0赞 Marionette_66 10/26/2023
@theozh我从flaticon网站下载它(flaticon.com/...)

答:

1赞 Ethan 10/26/2023 #1

我不知道这里到底发生了什么,但它与图像文件本身有关。如果我在 GIMP 中打开该文件并将其导出到一个新文件,而没有干预编辑/修改操作,则导出的文件可以正常用作具有透明区域的像素贴图。

比较 和 的输出,除了条目之外,没有显示任何对我来说突出的东西。identify -verbose original.pngidentify -verbose redo.pngpng:IHDR.color_type

我在此处附加重新导出的文件 - 尝试用它来代替您的原始图像文件,看看是否有效。enter image description here

值得一提的是,这是在两个文件上运行之间的差异:identify

diff -urp original.identify redo.identify 
--- original.identify   2023-10-25 22:38:42.002322272 -0700
+++ redo.identify       2023-10-25 22:38:57.165582322 -0700
@@ -1,5 +1,5 @@
 Image:
-  Filename: original.png
+  Filename: redo.png
   Permissions: rw-r--r--
   Format: PNG (Portable Network Graphics)
   Mime type: image/png
@@ -703,25 +703,26 @@ Image:
   Compression: Zip
   Orientation: Undefined
   Properties:
-    date:create: 2023-10-26T02:58:38+00:00
-    date:modify: 2023-10-26T02:58:34+00:00
-    date:timestamp: 2023-10-26T06:23:13+00:00
+    date:create: 2023-10-26T06:22:24+00:00
+    date:modify: 2023-10-26T06:22:24+00:00
+    date:timestamp: 2023-10-26T06:23:23+00:00
+    png:bKGD: chunk was found (see Background color, above)
     png:IHDR.bit-depth-orig: 8
     png:IHDR.bit_depth: 8
-    png:IHDR.color-type-orig: 2
-    png:IHDR.color_type: 2 (Truecolor)
+    png:IHDR.color-type-orig: 6
+    png:IHDR.color_type: 6 (RGBA)
     png:IHDR.interlace_method: 0 (Not interlaced)
     png:IHDR.width,height: 512, 512
     png:pHYs: x_res=3780, y_res=3780, units=1
-    png:tRNS: chunk was found
+    png:tIME: 2023-10-26T06:22:24Z
     signature: cb4667f54b948708bd7fd893e4668ca843bf816392a4bad8c8917b967cf1f1ea
   Artifacts:
     verbose: true
   Tainted: False
-  Filesize: 11772B
+  Filesize: 11446B
   Number pixels: 262144
   Pixel cache type: Memory
-  Pixels per second: 21.2189MP
+  Pixels per second: 21.0638MP
   User time: 0.010u
   Elapsed time: 0:01.012
   Version: ImageMagick 7.1.1-11 Q16-HDRI x86_64 21206 https://imagemagick.org

如果您在那里发现任何相关内容,请告诉我。如果它是一个可以测试的可重现文件属性,也许可以教 gnuplot 修复它或至少发出警告。

评论

0赞 theozh 10/26/2023
FWIW,如果我将原始PNG导入Inkscape,则有透明度...如果我再次将其从 Inkscape 导出到 PNG,我会看到 gnuplot 中的透明度......
0赞 Marionette_66 10/26/2023
@theozh我使用 IrfanView 查看并检查\设置“颜色”为透明;我将下载 GIMP 来检查\设置透明度
0赞 Marionette_66 10/26/2023
@Ethan 谢谢你的侦探工作。我将不再依赖单个程序来检查\设置图像文件的属性。
0赞 Marionette_66 10/26/2023
@Ethan。我使用了您重新导出的文件,并且确实发生了透明度!
0赞 theozh 10/26/2023 #2

正如 Ethan 已经提到的,OP 原始 PNG 的透明度有些“奇怪”,显然 GIMP 和 Inkscape 知道如何处理,但 gnuplot 将其解释为白色。

最简单的解决方案可能是修改原始 PNG(例如在 GIMP 或 Inkscape 中导入/导出)并将其用作 gnuplot 中的像素图。

以下并不是一个好的解决方案,但演示了原则上您可以使用 OP 的原始 PNG 文件(按原样)实现透明度 打印样式 .但是,存在以下缺点:with rgbalpha

  • OP 的 PNG 中的所有白色像素都转换为全透明。
  • 一些有意的白色像素也将转换为完全透明
  • 没有部分透明度
  • 原始图像(512x512 像素)的缩放/纵横比显然取决于图形 x,y 范围。因此,您必须修复范围,自动缩放会弄乱您的图表。此外,您需要摆弄缩放因子。

脚本:

### pixmap/rgbalpha transparency
reset session

FILE  = "SO77361444.png"
FILE2 = "SO77361444_inkscape.png"

set xrange[-10:10]
set yrange[0:3]
set key noautotitle
set samples 500

set pixmap 1 FILE  at -8,1 width 4
set pixmap 2 FILE2 at -2,1 width 4
set label 1 at -6,0.75 "OP's original PNG\nas pixmap" center
set label 2 at  0,0.75 "OP's PNG im-/exported\nvia Inkscape\nas pixmap" center
set label 3 at  6,0.75 "OP's original PNG\nas binary w rgbalpha\nand white-->transparent" center

plot for [i=10:30] i/10., \
     FILE binary filetype=png dx=0.0075 dy=0.002 \
       origin=(4,1) u (r=$1):(g=$2):(b=$3):(r*g*b==255**3?0:255) w rgbalpha
### end of script

结果:

enter image description here

评论

0赞 Marionette_66 10/26/2023
感谢您抽出宝贵时间讨论这个问题。脚本的输出非常清楚。