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

Perl 复制图像内容(不复制两个文件),perl,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

我想将
$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 );
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);
我的($ow,$oh)=($nw,$nh);
如果($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));
}
我的$2;
$string2.=$chars[rand@chars]表示1。。8.
$string2='/path/'$第二条。jpg';
我的$thumb=GD::Image->new($ow,$oh,1);
$thumb->copyResampled($jpg、$x、$y、0、0、$nw、$nh、$w、$h);
$thumb->edgeImage锐化(8);
$thumb->edgebrightness对比度(5,1.1);

所有信息都在GD模块的下面部分:

您不希望输出为
STDOUT
格式,也不希望输出为
.png
格式,而是希望输出为
.jpeg
。查看一下GD库的功能,其中有一个用于JPEG数据:
$jpegdata=$image->JPEG([$quality])

$jpegdata=$image->jpeg([$quality])

这将返回中的图像数据 JPEG格式。然后,您可以将其打印、通过管道传输到显示程序,或 将其写入文件。您可以将可选的质量分数传递给jpeg() 以控制JPEG的质量。这应该是一个整数 在0到100之间。质量分数越高,文件越大,质量越好 图像质量。如果不指定质量,jpeg()将选择 良好的违约

您需要的代码应该类似于:

open my $fd, '>', '<path_to_your_new_jpeg>';
binmode $fd;
print $fd $thumb->jpeg(100); # 100 for 100% quality
close $fd;
打开我的$fd,'>','';
binmode$fd;
打印$fd$thumb->jpeg(100);#100%为100%质量
收盘价$fd;
查看,您似乎可以使用
JPEG()
方法获取JPEG格式的图像数据,然后将该数据打印到您选择的文件中:

my$jpeg_data=$thumb->jpeg();
打开我的$jpg\u fh,“>”、“new\u image.jpg”或“无法打开:$!\n”;
binmode$jpg_fh;
打印$jpg_fh$jpeg_数据;
关闭$jpg\U fh或die“无法关闭:$!\n”;

什么是$fd?
$fd
是文件描述符或文件句柄。这是一个文件句柄。它由
open
调用设置(类似于OUT参数)。有关详细信息,请参见Perl。请参见What if
$ar==$nr
?@Borodin我不知道这不是我的代码,我只是在使用它。@slicks1:那么我认为你应该做更多的事情,而不是复制别人的代码来堆栈溢出,并希望我们为你完成工作。
open my $fd, '>', '<path_to_your_new_jpeg>';
binmode $fd;
print $fd $thumb->jpeg(100); # 100 for 100% quality
close $fd;