Schrift
[thread]7513[/thread]

Ermitteln JPG-Größe: ImageMagick

Leser: 5


<< |< 1 2 >| >> 11 Einträge, 2 Seiten
sesth
 2005-11-30 11:53
#60598 #60598
User since
2005-02-01
181 Artikel
BenutzerIn
[default_avatar]
Hallo,

die Frage bezieht sich zwar mehr auf ImageMagick als auf Perl - aber vielleicht kann mir jemand weiterhelfen.

Wir haben bei uns im Image-Verzeichnis des Webs eine JPG-Datei entdeckt, die laut IrfanView als Bild nur 30.040 Bytes groß ist und auf der Platte 186.313 Bytes einnimmt. Vermutlich hängt dort noch was dran, was nicht reingehört und im Viewer nicht angezeigt wird. Normalerweise sollte ja die Speichergröße bei JPG auf der Platte kleiner als im Hauptspeicher sein wg. der Kompression. Diverse Virenscanner schlagen bei dieser Datei aber keinen Alarm. Behandle ich die Datei per ImageMagick mit "Strip", reduziert sich die Größe auf der Platte auf 12.005 Bytes.

Jetzt wollte ich ein Analyse-Skript erstellen, was mir alle JPGs auflistet, deren Größe im Hauptspeicher kleiner ist als auf der Platte. Versucht habe ich es so:
Code (perl): (dl )
1
2
3
4
my $P = new Image::Magick;
$P->Read($ARGV[0]);
my ($fsize, $msize) = $P->Get('filesize', 'memory');
print "Filesize: $fsize, Memorysize: $msize\n";

Leider liefert das 'memory' Attribut immer "undef". Über Vorschläge, wie ich die Größe eines JPG-Bildes im Hauptspeicher via ImageMagick bestimmen kann wäre ich froh.
Gruß
Thomas
GwenDragon
 2005-11-30 12:47
#60599 #60599
User since
2005-01-17
14748 Artikel
Admin1
[Homepage]
user image
Und welche Version von Perl und Image::Magick benutzt du?
nepos
 2005-11-30 13:11
#60600 #60600
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Windows oder Linux/Unix?
sesth
 2005-11-30 13:58
#60601 #60601
User since
2005-02-01
181 Artikel
BenutzerIn
[default_avatar]
Ich arbeite unter W2k mit PerlMagick version 6.2.4 in ActivePerl 5.8.7.813. Übrigens bringt mir
Code (perl): (dl )
1
2
3
4
use Image::Magick;
my $P = new Image::Magick;
my $version = $P->Get('version');
print "Version: $version\n";

auch keinen Wert zurück.
Gruß
Thomas
GwenDragon
 2005-11-30 14:02
#60602 #60602
User since
2005-01-17
14748 Artikel
Admin1
[Homepage]
user image
Anscheinend ist die Windows-Implementation unvollständig.

Schon mal die aktuelle Version unter http://www.imagemagick.org/script/binary-releases.php#windows probiert?\n\n

<!--EDIT|GwenDragon|1133352198-->
Strat
 2005-11-30 14:08
#60603 #60603
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
kann es sein, dass da auch vorschaubilder eingebettet sind? ich glaube, bei JPEG geht sowas...
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
GwenDragon
 2005-11-30 14:59
#60604 #60604
User since
2005-01-17
14748 Artikel
Admin1
[Homepage]
user image
Nicht nur Vorschaubilder, sondern auch Datenbank-Infos (wie z. B. bei Photoshop) und EXIF-Daten!
sesth
 2005-11-30 15:18
#60605 #60605
User since
2005-02-01
181 Artikel
BenutzerIn
[default_avatar]
@GwenDragon: Danke für den Tipp. Die Installation war wohl in der Tat unvollständig. Ich hatte per PPM via www.bribes.org installiert. Mit Hilfe der Gesamtinstallation über den ImageMagick-Installer kommen jetzt Werte.

Version liefert: ImageMagick 6.2.5 11/13/05 Q16 http://www.imagemagick.org
und memory liefert jetzt 0. :( das bringt mich also noch nicht weiter.

@Strat: Mir ist klar, dass JPG nur ein Frame-Format ist, in dem noch weitere (Meta-)Daten enthalten sind. Aber das Verhältnis von 30K Nutzdaten (Rohformat) zu 186K (komprimiert mit Metadaten) macht mich doch stutzig. Zumindestens möchte ich wissen, was da dranhängt.
Gruß
Thomas
jan
 2005-11-30 19:52
#60606 #60606
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
guck doch einfach mal mit einem hexeditor rein, vielleicht siehst du ja so schon was, vor allem, wenn's IPTC-Daten sind, dürfte das leicht zu erkennen sein (hängen ganz am ende der datei? ach, ich bin nicht mehr sicher ;( )
J-jayz-Z
 2005-11-30 20:17
#60607 #60607
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
Stimmt. Vielleicht hilft dir das tool hexdump unter Linux
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

http://perl-tutor.de
<< |< 1 2 >| >> 11 Einträge, 2 Seiten



View all threads created 2005-11-30 11:53.