sub
_write {
my
(
$self
,
$anim
,
$fh
,
$options
) =
@_
;
print
$fh
"\N{ESCAPE}[2J"
;
my
$prevattr
=
''
;
for
my
$image
( @{
$anim
->frames } ) {
my
(
$width
,
$height
) =
$image
->dimensions;
for
my
$y
( 0 ..
$height
- 1 ) {
my
$max_x
=
$image
->max_x(
$y
);
unless
(
defined
$max_x
) {
print
$fh
"\n"
;
next
;
}
for
my
$x
( 0 ..
$max_x
) {
my
$pixel
=
$image
->getpixel(
$x
,
$y
)
|| {
char
=>
' '
,
attr
=> 7 };
my
$attr
= _gen_args(
$pixel
->{ attr } );
if
(
$attr
ne
$prevattr
) {
print
$fh
"\N{ESCAPE}[0;"
, _gen_args(
$pixel
->{ attr } ),
'm'
;
$prevattr
=
$attr
;
}
print
$fh
$pixel
->{ char };
}
print
$fh
"\n"
unless
$max_x
== 79;
}
if
(
$image
ne
$anim
->frames->[ -1 ] ) {
print
$fh
"\N{ESCAPE}[H"
;
}
}
print
$fh
"\N{ESCAPE}[0m"
;
}
sub
_gen_args {
my
$attr
=
shift
;
my
$fg
= 30 + (
$attr
& 7 );
my
$bg
= 40 + ( (
$attr
& 112 ) >> 4 );
my
$bl
= (
$attr
& 128 ) ? 5 :
''
;
my
$in
= (
$attr
& 8 ) ? 1 :
''
;
return
join
(
q{;}
,
grep
{
length
} (
$bl
,
$in
,
$fg
,
$bg
) );
}
1;