2007/04/23(月) [n年前の日記]
#3 [prog][perl] PerlMagick(ImageMagick)でゼロからgif画像を作るにはどうすればいいんだ
パレット値のみがある状態で、1x1とか4x4とか16x1とかそんな感じのgif画像を作りたいのだけど。何を $image->Set(hoge=>'piyo') すりゃいいのやら。
#!/usr/bin/perl
use strict;
use Image::Magick;
my $image;
$image = Image::Magick->new;
$image->Set(size=>'16x16');
$image->Set(geometry=>'16x16+0+0');
$image->Set(colorspace=>'RGB');
$image->ReadImage('xc:black');
$image->Set(background=>'#000000');
for ( my $i = 0; $i < 256; $ i++ ) {
my $s = sprintf("#%02x%02x%02x", $i, $i, $i);
# print "$s\n";
$image->Set("colormap[$i]" => $s);
my $x = $i % 16;
my $y = int($i / 16);
$image->Draw(primitive=>'point', points=>"$x,$y", fill=>$s);
}
$image->Set(class=>'Pseudo');
$image->Set(type=>'Palette');
$image->Set(depth=>'8');
$image->Set(colors=>'256');
$image->Set(format=>'gif');
$image->Set(magick=>'gif');
for ( my $i = 0; $i < 256; $ i++ ) {
# my $s = sprintf("#%02x%02x%02x", $i, $i, $i);
my $s = sprintf("rgb(%d,%d,%d)", $i, $i, $i);
$image->Set("colormap[$i]" => $s);
my $x = $i % 16;
my $y = int($i / 16);
# $image->Set("index[$x,$y]" => "$i");
}
my $x = $image->Write('output/output.gif');
warn "$x" if "$x";
undef $image;
exit;
これじゃダメなのだった。どうすりゃいいんだ。
[ ツッコむ ]
以上です。