复制图像内容(不复制两个文件)

时间:2016-05-04 20:07:15

标签: perl

我希望将$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 );

2 个答案:

答案 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";