Então, reescrevi alguns trechos e o código ficou um pouco menor. A função scale() não retorna mais os dados; agora ela escreve um arquivo.
sub scale {
my ($width, $height, $image)=@_;
my $scaled=$image->scale(xpixels=>$width,ypixels=>$height,type=>'min');
$scaled->write(file=>'tmp.jpg', type=>'jpeg');
}
Por sua vez, a função next_photo() lê este arquivo:
sub next_photo {
my $index=int(rand($#file_list));
my $filename=$file_list[$index];
$image->open(file=>$filename);
scale($photo_width, $photo_height, $image);
$photo->configure(-file=>'tmp.jpg');
$filename=$file_list[($index+1)%($#file_list+1)];
$image->open(file=>$filename);
scale($thumb_width, $thumb_height, $image);
$thumb->configure(-file=>'tmp.jpg');
$main->update();
}
Evidentemente, não quero escrever este arquivo no cartão de memória para não apressar o seu fim. Então, a solução é criar um disco em RAM e escrever lá. Ele não precisa ser muito grande, os JPEGs temporários não passam de 100KB (por isso, o script original demorou a ocupar toda a memória).
Nenhum comentário:
Postar um comentário