我希望将$thumb
的内容转换为新的未创建的JPEG文件。
这是我目前的代码:
my $path = '/pathtoimage/image.jpg' my $jpg = GD::Image->newFromJpeg( $path, 1 );
my ( $nw, $nh, $x, $y ) = ( 80, 80, 0, 0 );
my ( $ar, $nr ) = ( $w / $h, $nw / $nh );
my ( $ow, $oh ) = ( $nw, $nh );
if ( $ar > $nr ) {
$nw = int( $w * ( $nh / $h ) );
$x = int( ( $ow / 2 ) - ( $nw / 2 ) );
}
elsif ( $ar < $nr ) {
$nh = int( $h * ( $nw / $w ) );
$y = int( ( $oh / 2 ) - ( $nh / 2 ) );
}
my $string2;
$string2 .= $chars[ rand @chars ] for 1 .. 8;
$string2 = '/path/' . $string2 . '.jpg';
my $thumb = GD::Image->new( $ow, $oh, 1 );
$thumb->copyResampled( $jpg, $x, $y, 0, 0, $nw, $nh, $w, $h );
$thumb->edgeImageSharpen(8);
$thumb->edgeBrightnessContrast( 5, 1.1 );
答案 0 :(得分:2)
所有信息都在GD模块的documentation中:
# make sure we are writing to a binary stream binmode STDOUT; # Convert the image to PNG and print it on standard output print $im->png;
您希望将STDOUT
输出放在.png
中,而不是.jpeg
格式,而不是$jpegdata = $image->jpeg([$quality])
格式。看一下GD库的output methods,就有一个用于JPEG数据:open my $fd, '>', '<path_to_your_new_jpeg>';
binmode $fd;
print $fd $thumb->jpeg(100); # 100 for 100% quality
close $fd;
。
$ jpegdata = $ image-&gt; jpeg([$ quality])
返回图像数据 JPEG格式。然后,您可以打印它,将其传送到显示程序,或 把它写到文件中。您可以将可选的质量得分传递给jpeg() 为了控制JPEG质量。这应该是一个整数 0到100之间。质量得分越高,文件越大,效果越好 画面质量。如果你没有指定质量,jpeg()会选择一个 好的默认。
您想要的代码应该是:
{{1}}
答案 1 :(得分:0)
查看Documentation for GD
,您似乎可以使用jpeg()
方法获取JPEG格式的图像数据,然后可以将该数据打印到您选择的文件中:
my $jpeg_data = $thumb->jpeg();
open my $jpg_fh, '>', 'new_image.jpg' or die "Could not open: $!\n";
binmode $jpg_fh;
print $jpg_fh $jpeg_data;
close $jpg_fh or die "Could not close: $!\n";