Schrift
[thread]6422[/thread]

GD-Problem: Fehler (Seite 3)



<< |< 1 2 3 >| >> 28 Einträge, 3 Seiten
ptk
 2004-07-22 20:13
#84738 #84738
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
GD ist kleiner (als Library) und meistens schneller. Bei Image::Magick sehen die Ergebnisse oft besser aus. Dafuer ist es aber auch langsamer.
Froschpopo
 2004-07-23 11:52
#84739 #84739
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
stimmt, die Qualität der Bilder lässt zu wünschen übrig, aber ich weiß dass man auch die Qualität festlegen kann, bei GD! Scheiße, meine Browser überstützen alle nicht strat's Seite, da hab ich irgendwann mal etwas darüber gelesen...
renee
 2004-07-23 11:58
#84740 #84740
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ich hoffe, Du hast das hier gemeint...

Copyright: Martin Fabiani (http://www.fabiani.net ) -> Codebeispiele
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
01: #! /usr/bin/perl
02: use warnings;
03: use strict;
04: use File::DosGlob();
05: use Image::Size();
06: use GD;
07: # --- Configuration ---
08: my $path = "images"; # where are the original images located
09: my $thumbnailPath = "thumbs"; # where to write the thumbnails
10: my $thumbnailWidth = 100; # width of thumbnails
11: my $thumbnailQuality = 90; # integer from 1 to 100
12: # --- Code ---
13: GD::Image->trueColor(1); # improves image quality: thx to Perli from www.perl.de
14: # loop over all files in directory
15: for my $filename (&File::DosGlob::glob("$path/*.*")) {
16: # get thumbnail height and width and heigth of original image
17: my ($thumbnailHeight, $width, $height) =
18: &GetImageSize($filename, $thumbnailWidth)
19: or next;
20:
21: # extract filetype and convert it to lowercase
22: my ($ending) = $filename =~ /\.([^.]+?)$/;
23: $ending = lc($ending);
24:
25: # build target filename
26: my $targetFilename = $filename;
27: $targetFilename =~ s/\Q$path\E/$thumbnailPath/g;
28:
29: # do some debugging output
30: print "$filename: ${width}x$height\t";
31: print "=> $targetFilename: ${thumbnailWidth}x$thumbnailHeight\n";
32: my $image; # try to read image
33: if ($ending eq 'jpg' or $ending eq 'jpeg') {
34: $image = GD::Image->newFromJpeg($filename);
35: }
36: elsif ($ending eq 'png') {
37: $image = GD::Image->newFromPng($filename);
38: }
39: # check if reading was successful
40: $image or warn ("Error: couldn't read $filename as $ending: $!\n"), next;
41: # create thumbnail
42: my $thumbnail = GD::Image->new($thumbnailWidth, $thumbnailHeight);
43: $thumbnail->copyResized( $image, 0,0, 0,0,
44: $thumbnailWidth, $thumbnailHeight,
45: $width, $height,
46: );
47:
48: # open outfile
49: open (OUT, ">$targetFilename") or
50: warn("Error: couldn't create '$targetFilename': $!\n"), next;
51: binmode (OUT);
52: # write image to file
53: if ($ending eq 'jpg' or $ending eq 'jpeg') {
54: print OUT $thumbnail->jpeg($thumbnailQuality);
55: }
56: elsif ($ending eq 'png') {
57: print OUT $thumbnail->png();
58: }
59: # close file and do error checking (e.g. disk full?)
60: close (OUT) or warn "Error: couldn't write to file '$targetFilename': $!\n";
61:
62: } # for
63: # ------------------------------------------------------------
64: sub GetImageSize {
65: my ($filename, $thumbnailWidth) = @_;
66: my (@size) = &Image::Size::attr_imgsize($filename);
67: unless ( $size[1] and $size[3]) {
68: warn "Error: couldn't get imagesize of $filename\n";
69: return ();
70: } # unless
71: my $thumbnailHeight = int $thumbnailWidth * $size[3] / $size[1];
72: return ($thumbnailHeight, @size[1,3]);
73: } # GetImageSize
74: # ------------------------------------------------------------



Das Modul Image::Size ist leider kein Standardmodul, kann jedoch sehr einfach installiert werden (eine sehr gute Alternative dazu ist Image::Info). Das Modul GD ist leider auch kein Standardmodul und ist wegen der vielen Abhängigkeiten ziemlich komplex zu installieren. Bei den meisten Linux-Distributionen ist es dabei, sodaß man es so am einfachsten installieren kann. Für Activestate-Perl haben gottseidank ein paar Leute schon fertige Pakete geschnürt, die man mit ppm installieren kann. Leider ist es ein wenig schwierig, diese Pakete zu finden. Für Perl5.8 findet man es (sowie viele weitere) auf http://mirror.dulug.duke.edu/pub/apache/perl/win32-bin/ppms/. Mächtigere Alternativen zu GD sind Image::Magick und Gimpperl.
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
ptk
 2004-07-23 12:44
#84741 #84741
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Aeltere Versionen von GD (kleiner als 2) haben z.B. nur 8-Bit-Paletten unterstuetzt. Das reicht fuer GIFs aus, aber nicht fuer JPEGs. Bei neueren GD-Version kann man aber auch mit True-Color-Bildern arbeiten.

ImageMagick ist genauer, wenn es um Dithering oder Anti-Aliasing geht. Hier ist mal ein Beispiel einer generierten Karte, einmal mit GD und einmal mit ImageMagick. GD hat dabei nur den Bruchteil einer Sekunde fuer die Erzeugung gebraucht, waehrend es bei ImageMagick 4 Sekunden waren.

GD:
http://bbbike.sourceforge.net/tmp/gd.png

ImageMagick:
http://bbbike.sourceforge.net/tmp/magick.png
renee
 2004-07-23 12:53
#84742 #84742
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Aber man sieht auch deutliche Qualitätsunterschiede...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
ptk
 2004-07-23 13:14
#84743 #84743
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=renee,23.07.2004, 10:53]Aber man sieht auch deutliche Qualitätsunterschiede...[/quote]
Das meinte ich (auch).
Froschpopo
 2004-07-23 18:16
#84744 #84744
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
perldoc GD:
Code: (dl )
1
2
3
4
5
6
7
8
9
       $jpegdata = $image->jpeg([$quality])
          This returns the image data in JPEG format.  You can
          then print it, pipe it to a display program, or write
          it to a file.  You may pass an optional quality score
          to jpeg() in order to control the JPEG quality.  This
          should be an integer between 0 and 100.  Higher qual-
          ity scores give larger files and better image quality.
          If you don't specify the quality, jpeg() will choose a
          good default.

gibts da irgendein standard der gesetzt wird, wenn man die funktion nicht belegt bzw kein wert übergibt?
"a good default" muss ja nicht gleich auch "best" sein...\n\n

<!--EDIT|Froschpopo|1090592289-->
ptk
 2004-07-23 20:49
#84745 #84745
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
cjpeg verwendet laut Dokumentation 75%, und da dieses genau wie GD auf libjpeg basiert, wird es dort wohl genau so sein. Qualitaetswerte Richtung 100% fuehren zu grossen Dateien und das blosse Auge erkennt solche Bilder trotzdem nicht als das bessere. Wenn man unbedingt an der Dateigroesse sparen will, kann man bis auf 30% runtergehen, ohne dass JPEG-Artefakte den Bildgenuss zu sehr stoeren.
<< |< 1 2 3 >| >> 28 Einträge, 3 Seiten



View all threads created 2004-07-21 21:02.