2016-05-04 10 views
-2

$thumbの内容を新しい未作成のJPEGファイルにしたいと考えています。ここで画像の内容をコピーする(2つのファイルをコピーしない)

は私の現在のコードです:

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

はhttps://metacpan.org/pod/GD#Image-Data-Output-Methods – ysth

+1

何 '$のAR == $のnr'場合の例を参照してください? – Borodin

+0

@Borodin私はこれが私のコードではないことを知っていません。 – slicks1

答えて

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を使用することをお勧めします。 GDライブラリのoutput methodsを見ると、JPEGデータ用のものがあります:$jpegdata = $image->jpeg([$quality])

$ jpegdata = $イメージ - > JPEG([$品質])

これは JPEG形式の画像データを返します。印刷したり、表示プログラムにパイプしたり、 ファイルに書き込むことができます。 JPEG品質を制御するために、オプションの品質スコアをjpeg() に渡すことができます。これは、0から100までの整数 である必要があります。品質スコアが高いほどファイルが大きくなり、画像品質は向上します( )。品質を指定しないと、jpeg()は の良いデフォルトを選択します。

あなたのようなものでなければなりませんしたいコード:Documentation for GDを見てみると

open my $fd, '>', '<path_to_your_new_jpeg>'; 
binmode $fd; 
print $fd $thumb->jpeg(100); # 100 for 100% quality 
close $fd; 
+0

$ fdとは何ですか? – slicks1

+0

'$ fd'はファイル記述子またはファイルハンドルです。 [ファイル記述子とは何ですか](https://en.wikipedia.org/wiki/File_descriptor) – eballes

+2

これはファイルハンドルです。 'open'コール(OUTパラメータのように)によって設定されます。詳細については、Perlの[チュートリアルを開く](http://perldoc.perl.org/perlopentut.html)を参照してください。 – PerlDuck

0

が、それはあなたが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"; 
関連する問題