2016-05-04 18 views
-2

Ich möchte den Inhalt von $thumb in eine neue, noch nicht erstellte JPEG-Datei bringen.Bildinhalte kopieren (keine zwei Dateien kopieren)

Hier ist mein aktueller Code:

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

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

+1

Siehe Was ist, wenn '$ ar == $ nr'? – Borodin

+0

@Borodin Ich weiß nicht, das ist nicht mein Code, ich arbeite nur damit. – slicks1

Antwort

2

die Informationen im All documentation der GD-Modul:

# 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; 

Anstatt die Ausgabe in STDOUT Haben Sie sie wollen in einer Datei und auch anstelle eines .png Formats bevorzugen Sie eine .jpeg. Einen Blick auf die output methods der GD-Bibliothek gibt es eine für JPEG-Daten: $jpegdata = $image->jpeg([$quality]).

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

Dies gibt die Bilddaten in JPEG-Format. Sie können es dann ausdrucken, an ein Anzeigeprogramm senden oder es in eine Datei schreiben. Sie können eine optionale Qualitätsbewertung an jpeg() übergeben, um die JPEG-Qualität zu steuern. Dies sollte eine Ganzzahl zwischen 0 und 100 sein. Höhere Qualitätswerte ergeben größere Dateien und bessere Bildqualität. Wenn Sie die Qualität nicht angeben, wählt jpeg() einen guten Standard.

Der Code, den Sie sollen wie etwas sein wollen:

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

was genau ist $ fd? – slicks1

+0

'$ fd' ist der Dateideskriptor oder Dateihandle. [Was ist ein Dateideskriptor?] (Https://en.wikipedia.org/wiki/File_descriptor) – eballes

+2

Es ist ein Dateihandle. Es wird durch den Aufruf "open" (wie ein OUT-Parameter) eingestellt. Weitere Informationen finden Sie in Perls [Anleitung zu Öffnen] (http://perldoc.perl.org/perlopentut.html). – PerlDuck

0

am Documentation for GD Sehen, würde es scheinen, wie Sie die Bilddaten im JPEG-Format mit der jpeg() Methode erhalten können und dann drucken, dass Daten in eine Datei Ihrer Wahl:

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