- 积分
- 3638
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2014-10-21
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
一、需求来源
有时我们画图会有“非矩形”的情况,例如我们要画个圆,或者行政区图,出图时会被自动用白色补成矩形,
后续使用时,比如贴到地图上,这些白色部分就比较碍眼,显得不专业,
于是,我写了个函数,用于将图片中纯白部分(该位置rgb和接近255*3)做透明处理(即alpha层设为0)
非纯白部分,可按需求自行设置透明度
二、源代码
;该程序用于把一张图中纯白部分做成透明,其他部分透明度可自由设置
;infile是待处理图的绝对路径
;函数名释义:trans为透明之意,png为输出文件格式
pro transPng,infile
cut=strsplit(infile,'\',/extract)
cut=strsplit(infile,'.',/extract)
;根据文件后缀不同分别读取:
if(cut[-1] eq 'png')then begin
read_png,infile,ima
endif
if(cut[-1] eq 'jpg' or cut[-1] eq 'jpeg')then begin
read_jpeg,infile,ima
endif
;不论三层的jpg还是四层的png,只使用前三层rgb:
ima=ima[0:2,*,*]
sz=size(ima)
;新建一个文件用于输出png:
png=bytarr(4,sz[2],sz[3])
;把rgb前三层放入输出文件的前三层,
;第四层初始值0,后面检查前三层中不是纯白的都赋予255,纯白的保持全透明0
png[0:2,*,*]=ima
png[3,*,*]=0
;制作alpha层,初始值都是0
one=bytarr(sz[2],sz[3])
;rgb三层和是255*3就是本白/纯白,不是纯白的alpha值赋予255
t=total(ima,1);求和
;[254,254,253]这种也算白色,这个可以自由设置
p=where(t le 255*3-9,count)
;设置非白色部分的透明度,可以是全不透明255,如果有底图要显示可以半透明128
one[p]=255
;把alpha层赋给输出变量的第四层
png[3,*,*]=one
;按原图名输出png图(会覆盖),也可改为其他名字:
write_png,infile,png
end
|
|