[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[mgp-users-jp 00870] Re: BG-color of image in lcutin, rcutin and colored-eps



  楯岡といいます。

From: Magicpoint-User <mgp@kanz.ce.shibaura-it.ac.jp>
> あ、いえ、縮尺調整でドットが目立つのを嫌って、
> 自作画像はLaTeX形式も含めて全てepsを用いています。
> よって、背景色を透過にしたいというのはepsでの話なのです。

  色付きの eps は背景色が「白」なので、mgp では素直に白が表示されてし
まうのだと理解しています。

  私は添付したような perl のフィルタを使って eps から透過gif を動的に
生成して使っています。ghostscript, netpbm, giftrans が必要です。

  例えば、mode.eps というファイルがあった場合、

%filter "./mktransgif.pl mode 500 360 white"
%endfilter
%center
%newimage "mode.gif"

などとやると、500x360 の透過 gif を生成して表示します。縮尺調整を自分
でやらないといけないのでいまいちですが、どうしても透過したい時には重宝
しています。

  参考までに。

#  BoundingBox の解釈などは mgp そのものから取ったコードなので、mgp に
#この機能があればいいのかしらん...
--
  電気通信大学 情報工学科 計算機応用学講座
  楯岡孝道 (Tateoka Takamichi)  tate@cs.uec.ac.jp
#!/usr/local/bin/perl

## usage: mktransgif.pl basename xsize ysize transparent_color
##  input: basename.eps
##  output: basename.gif

## Programmed by tate@cs.uec.ac.jp
## Most of the code is taken from Magic Point (http://www.mew.org/mgp/).
##  You can use, copy, modify and/or re-distribute this program without notice.
##  THIS PROGRAM IS PROVIDED "AS-IS", AND NO WARRANTY.

$GSDEV = 'ppmraw';
$GS = 'gs';
$PNMSCALE = "pnmscale";
$PNMDEPTH = "pnmdepth";
$PPMTOGIF = "ppmtogif";
$CONVERT = "convert";
$GIFTRANS = "giftrans";
$AA_ZOOM = 1;		# zoom for anti-aliasing

$ifile = $ARGV[0] . ".eps";
$ofile = $ARGV[0] . ".gif";
$xsize = $ARGV[1];
$ysize = $ARGV[2];
$transcolor = $ARGV[3];		# color to be transparent

# check last modified time
if (-f $ofile){
    @s = stat(_);
    $otime = $s[9];
    @s = stat($ifile);
    $itime = $s[9];
    exit(0) if ($itime < $otime);	# nothing to do
}

open(IFILE, $ifile) || die("$ifile open failed");
undef($x1);
while(<IFILE>){
    last if (!/^%/ || /^%EndComments/);
    if (/^%%BoundingBox: ([-0-9]+) ([-0-9]+) ([-0-9]+) ([-0-9]+)/){
	$x1 = $1;
	$y1 = $2;
	$x2 = $3;
	$y2 = $4;
    }
}
if (!defined($x1)) {die("Can't found BoundingBox\n")};

$orig_width = $x2 - $x1;
$orig_height = $y2 - $y1;

$gs_xsize = $AA_ZOOM * $xsize;
$gs_ysize = $AA_ZOOM * $ysize;
$gs_xzoom = $gs_xsize / $orig_width;
$gs_yzoom = $gs_ysize / $orig_height;

# print "|$GS -sDEVICE=$GSDEV -g$gs_xsize" . "x" . "$gs_ysize -q -sOutputFile=- -";
open(GS, "|$GS -sDEVICE=$GSDEV -g$gs_xsize" . "x" . "$gs_ysize -q -sOutputFile=- -" .
     "| $PNMDEPTH 255 " .
     "| $PNMSCALE " . 1/$AA_ZOOM .
     "| $PPMTOGIF 2>/dev/null | $GIFTRANS -b $transcolor -t $transcolor > $ofile");
#     "| $PPMTOGIF -transparent $transcolor > $ofile 2> /dev/null ");
#     "| $CONVERT -transparency $transcolor - $ofile");

# print "$gs_xzoom $gs_yzoom scale\n";
# print "-$x1 -$y1 translate\n";
# print "($ifile) run\n";
# print "showpage\n";
# print "quit\n";
$oldfh = select(GS); $|=1; select($oldfh);
print GS "$gs_xzoom $gs_yzoom scale\n";
printf GS "%d %d translate\n", -1 * $x1, -1 * $y1;
print GS "($ifile) run\n";
print GS "showpage\n";
print GS "quit\n";

wait;