提问人:Marionette_66 提问时间:10/26/2023 最后编辑:Marionette_66 更新时间:10/26/2023 访问量:72
gnuplot:如何使用像素图显示透明png
gnuplot: How to display transparent png with pixmap
问:
我正在尝试使用命令将图像 (png) 放置在地图顶部。set pixmap
它确实有效,但 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
罗伯托
答:
1赞
Ethan
10/26/2023
#1
我不知道这里到底发生了什么,但它与图像文件本身有关。如果我在 GIMP 中打开该文件并将其导出到一个新文件,而没有干预编辑/修改操作,则导出的文件可以正常用作具有透明区域的像素贴图。
比较 和 的输出,除了条目之外,没有显示任何对我来说突出的东西。identify -verbose original.png
identify -verbose redo.png
png:IHDR.color_type
我在此处附加重新导出的文件 - 尝试用它来代替您的原始图像文件,看看是否有效。
值得一提的是,这是在两个文件上运行之间的差异: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
结果:
评论
0赞
Marionette_66
10/26/2023
感谢您抽出宝贵时间讨论这个问题。脚本的输出非常清楚。
评论