| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |
|

19-10-2009, 11:05
|
|
Lennynero
Registrierter Benutzer
|
|
Registriert seit: Sep 2007
Beiträge: 121
|
|
Kompremierung eines JPEG mit PHP-Bordmitteln auslesen
Hallo,
gibt es eine Möglichkeit mit den Bordmitteln von PHP die Kompremierungsqualität eines JPEGs auszulesen?
Herzliche Grüße,
markus
|

19-10-2009, 11:19
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Hallo,
das kann ich mit einem klaren "jein" beantworten.
Diese Qualitätseinstellung bezieht sich auf die Quantisierung beim Encoden, also Speichern eines Bildes, wird aber selbst nicht in der Datei gespeichert. Programme, die behaupten "das Originalbild hatte 85%" errechnen das anhand statistischer Merkmale der komprimierten Bilddaten, was aber sehr ungenau ist und genau aus diesem Grund in jedem Programm einen anderen Wert ergibt.
Wenn du also diese komplizierten Statistik-Berechnungen (die man mit PHP theoretisch durchaus machen könnte) auf dich nehmen willst, um einen nichtssagenden Wert rauszubekommen, dann "ja".
Wenn du einen exakten Wert erwartest, den du irgendwo codiert in den JPEG-Header-Feldern findest, dann "nein".
Gruß,
Amica
Geändert von AmicaNoctis (19-10-2009 um 11:52 Uhr)
|

19-10-2009, 12:51
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Wenn's dir ganz doll wichtig ist und dir die Schnelligkeit egal ist, hab ich hier noch nen sehr, sehr unperformanten Skriptcode, der das Bild solange mit absteigender Qualität speichert, bis die Dateigröße ungefähr übereinstimmt:
PHP-Code:
$file = isset($_GET["path"]) ? $_GET["path"] : null;
if ($file) {
$size = filesize($file);
$img = imagecreatefromjpeg($file);
for ($i = 0; $i < 100; $i += 5) {
ob_start();
imagejpeg($img, null, 100 - $i);
$data = ob_get_clean();
if (strlen($data) < $size) {
echo("Estimated quality: " . (100 - $i) . "%<br />\n");
break;
}
}
}
Aber wie gesagt, das was da raus kommt, hat nicht wirklich irgendeine Bedeutung.
|

19-10-2009, 12:54
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
Zitat:
Zitat von AmicaNoctis
Wenn's dir ganz doll wichtig ist und dir die Schnelligkeit egal ist, hab ich hier noch nen sehr, sehr unperformanten Skriptcode, der das Bild solange mit absteigender Qualität speichert, bis die Dateigröße ungefähr übereinstimmt:
PHP-Code:
$file = isset($_GET["path"]) ? $_GET["path"] : null;
if ($file) {
$size = filesize($file);
$img = imagecreatefromjpeg($file);
for ($i = 0; $i < 100; $i += 5) {
ob_start();
imagejpeg($img, null, 100 - $i);
$data = ob_get_clean();
if (strlen($data) < $size) {
echo("Estimated quality: " . (100 - $i) . "%<br />\n");
break;
}
}
}
Aber wie gesagt, das was da raus kommt, hat nicht wirklich irgendeine Bedeutung.
|
Dafür bräuchtest du aber die unkomprimierte Originaldatei. Eine bereits komprimierte Datei nochmal zu komprimieren ist ziemlich sinnlos.
|

19-10-2009, 13:04
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Zitat:
Zitat von h3ll
Dafür bräuchtest du aber die unkomprimierte Originaldatei. Eine bereits komprimierte Datei nochmal zu komprimieren ist ziemlich sinnlos.
|
Das stimmt zwar, aber für den Vergleich der Dateigröße haut es trotzdem hin, da ich ja prüfe, ab welcher Qualität (absteigend) sie kleiner wird als die (komprimierte) Ausgangsdatei. Den Hinweis auf die dennoch mangelnde Aussagekraft dieses Wertes hatte ich ja ebenfalls schon gegeben.
|

19-10-2009, 13:20
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Ok, vergiss das Script. H3ll hatte Recht. Zwischen 100% und 60% haut das so halbwegs hin, aber ich hab grad mal nen Extremfall getestet: Eine Datei mit 5% gespeichert und durch das Skript gejagt. Ergebnis: 70%
Also absolut unbrauchbar. Sorry für das Wecken falscher Hoffnungen!
|

19-10-2009, 13:56
|
|
pekka
PHP Master
|
|
Registriert seit: Jun 2001
Ort: Köln
Beiträge: 6.608
|
|
OffTopic:
@AmicaNoctis: Für den Support, den Du hier im Forum bietest, könnte man Geld verlangen. Ernsthaft - Hut ab!
|

19-10-2009, 13:59
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
OffTopic:
Sowas hört man gern. Dankeschön
|

19-10-2009, 16:10
|
|
Lennynero
Registrierter Benutzer
|
|
Registriert seit: Sep 2007
Beiträge: 121
|
|
Auch hier nochmal: Vielen Dank!
|

19-10-2009, 17:49
|
|
PHP-Desaster
PHP Expert
|
|
Registriert seit: Mar 2006
Beiträge: 3.104
|
|
Problem mit der Dateigrößen-Vergleichslösung ist allerdings auch, dass so ein JPeg über nette Metatags verfügen kann. Die Idee ist aber sehr kreativ
|

20-10-2009, 08:56
|
|
Lennynero
Registrierter Benutzer
|
|
Registriert seit: Sep 2007
Beiträge: 121
|
|
Zitat:
Zitat von PHP-Desaster
Problem mit der Dateigrößen-Vergleichslösung ist allerdings auch, dass so ein JPeg über nette Metatags verfügen kann. Die Idee ist aber sehr kreativ 
|
An den EXIF-Daten bin ich gerade am werkeln, bei 4000 Dateien konnte ich durch das entfernen der Metatags (Mithilfe von "jpegtrans") immerhin knappe 40 MB einsparen.
|

20-10-2009, 09:48
|
|
Lennynero
Registrierter Benutzer
|
|
Registriert seit: Sep 2007
Beiträge: 121
|
|
Gibt es vielleicht ein kleines Kommandozeilentool, das mir zumindest annähernd perfomant ein Ergebnis zurückliefern kann (es sollen ca. 10.000 Images gescannt werden)?
Im Grunde muss es auch nicht so in die Tiefe gehen, denn mich interessieren nur die Bilder die (wahrscheinlich) mit voller Qualität gespeichert worden sind?
|

20-10-2009, 12:18
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
jpegdump
|

20-10-2009, 13:07
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Zitat:
Zitat von onemorenerd
jpegdump
|
Das ermittelt aber auch keine Qualitätsangabe.
|

20-10-2009, 13:45
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|