Webstatt.org - Community seit 2006 - 2012 (2024?)

Diesmal ists die GDLib...

Avatar user-317
05.04.2006 19:07

...die nicht will wie ich. Ich poste erstmal den Code und das Ergebnis :
thumb.php
<?php
header('Content-type: image/jpeg'zwinkern;
$scale = 3;
$size = getimagesize($_GET['image']);
$width = 200;
$height = 200;

$text = explode('/', $_GET['image']);
$text = $text[1];

$src = imagecreatefromjpeg($_GET['image']);
$dest = imagecreatetruecolor($width, $height);
$fcol = imagecolorallocate($dest, 255, 255, 255);
$fcol2 = imagecolorallocate($dest, 0, 0, 0);

imagecopyresized($dest, $src, 0, 0, 0, 0, $width, $height, $size[0], $size[1]);
imagestring($dest, 3, 10, 11, $text, $fcol2);
imagestring($dest, 3, 10, 9, $text, $fcol2);
imagestring($dest, 3, 11, 10, $text, $fcol2);
imagestring($dest, 3, 9, 10, $text, $fcol2);
imagestring($dest, 3, 10, 10, $text, $fcol);
imagejpeg($dest, '', 100);
imagedestroy($dest);
imagedestroy($src);
?>


imagemanager.php
<?php
$verzeichnis = dir('events'zwinkern;
$i = '0';

while($bild = $verzeichnis->read()) {
if(eregi('.jpg$', $bild) OR eregi('.jpeg$', $bild)) {
echo '<a href="events/' . $bild . '">';
echo '<img src="thumb.php?image=events/'. $bild . '" alt="' . $bild . '" title="' . $bild .'" border="0"></a> ';

if($i % 2) {
echo "<br />\n";
}

$i++;
}
}
?>


Ergebnis : http://mmsky.de/imagemanager.php

Ironischer Weise funktioniert das ganze lokal ganz gut.
Hier noch phpinfo(); vom Server :
http://mmsky.de/info.php

Avatar user-182
05.04.2006 20:44

Ich glaube das es an zu großen Bildern liegt. Weis PHP mal mehr Speicher zu (z.B. von 8M auf 16M) und teste es noch einmal zwinkern

Seid ihr auch schon wix'r? xD
Avatar user-317
05.04.2006 21:13

Kann ich das per Ini-Set temporär vornehmen? Weil ich habe keinen Zugriff auf die php.ini

Avatar user-255
06.04.2006 13:59

Die Thumbs solltest du nicht dynamisch erzeugen. Lieber im selben Verzeichnix ablegen wie das Bild und wenn zu einem Bild noch keins generiert wurde, dann musst du das eben nachholen.
Spart auf jeden Fall Serverlast und Aufbauzeit.

Those who can, do. Those who can't, teach. # Musik gehört dem Volk! # last.fm
Avatar user-317
08.04.2006 17:48

Langsam verliere ich den Glauben daran :/
Jetzt hab ich das ganze umgemodelt, jetzt klappts aber gar nicht mehr, auch nicht mit einem Bild :

<?php
function thumb($image, $folder = 'thumbs', $width = '200', $height = '200'zwinkern {
$size = getimagesize('events/' . $image);
$width = 200;
$height = 200;

$text = explode('/', $image);
$text = $text[1];

$src = imagecreatefromjpeg('events/' . $image);
$dest = imagecreatetruecolor($width, $height);
$fcol = imagecolorallocate($dest, 255, 255, 255);
$fcol2 = imagecolorallocate($dest, 0, 0, 0);

imagecopyresized($dest, $src, 0, 0, 0, 0, $width, $height, $size[0], $size[1]);
imagestring($dest, 3, 10, 11, $text, $fcol2);
imagestring($dest, 3, 10, 9, $text, $fcol2);
imagestring($dest, 3, 11, 10, $text, $fcol2);
imagestring($dest, 3, 9, 10, $text, $fcol2);
imagestring($dest, 3, 10, 10, $text, $fcol);
imagejpeg($dest, $folder, 100);
imagedestroy($dest);
imagedestroy($src);

return TRUE;
}

function rename_image($image) {
$bild2 = $image;
$bild2 = str_replace('ä', 'ae', $bild2);
$bild2 = str_replace('ü', 'ue', $bild2);
$bild2 = str_replace('ö', 'oe', $bild2);
$bild2 = str_replace('Ä', 'Ae', $bild2);
$bild2 = str_replace('Ü', 'Ue', $bild2);
$bild2 = str_replace('Ö', 'Oe', $bild2);
$bild2 = str_replace(' ', '_', $bild2);

if($image != $bild2) {
rename('events/' . $image, 'events/' . $bild2);
return $bild2;
} else {
return $image;
}
}
?>


<?php
$verzeichnis = dir('events'zwinkern;
include('functions.php'zwinkern;

while($bild = $verzeichnis->read()) {
if(eregi('.jpg$', $bild) OR eregi('.jpeg$', $bild)) {
echo "Alt : $bild <br />\n";

$n_bild = rename_image($bild);
echo "Neu : $n_bild <br />\n";

if(!file_exists('thumbs/' . $n_bild)) {
thumb($n_bild);
echo "Thumb erstellt<br /><br />\n\n";
} else {
echo "Thumb existiert bereits<br /><br />\n\n";
}
}
}
?>


Das zieht jetzt noch mehr als zuvor :
Fatal error: Allowed memory size of 12582912 bytes exhausted (tried to allocate 8192 bytes) in /var/www/l3s8506/html/functions.php on line 86

Avatar user-255
08.04.2006 18:20

Dein Skript frisst zu viel Arbeitsspeicher. :\

Du könntest versuchen,
imagedestroy($src);
schon nach Zeile 15 aufzurufen.

Mit der Funktion memory_get_usage() kannst du noch bei jedem Thumb generieren die Auslastung prüfen.
Wäre mal interessant zu sehen, wie gut der garbage collector in PHP arbeitet lächeln

Those who can, do. Those who can't, teach. # Musik gehört dem Volk! # last.fm
Avatar user-317
08.04.2006 18:45

http://mmsky.de/thumb.php
Kommt nicht weit :/

<?php
function thumb($image, $folder = 'thumbs', $width = '200', $height = '200'zwinkern {
$size = getimagesize('events/' . $image);

$text = explode('/', $image);
$text = $text[1];

$src = imagecreatefromjpeg('events/' . $image);
$dest = imagecreatetruecolor($width, $height);
$fcol = imagecolorallocate($dest, 255, 255, 255);
$fcol2 = imagecolorallocate($dest, 0, 0, 0);

imagecopyresized($dest, $src, 0, 0, 0, 0, $width, $height, $size[0], $size[1]);
imagedestroy($src);
imagestring($dest, 3, 10, 11, $text, $fcol2);
imagestring($dest, 3, 10, 9, $text, $fcol2);
imagestring($dest, 3, 11, 10, $text, $fcol2);
imagestring($dest, 3, 9, 10, $text, $fcol2);
imagestring($dest, 3, 10, 10, $text, $fcol);
imagejpeg($dest, $folder, 100);
imagedestroy($dest);

return TRUE;
}

function rename_image($image) {
$bild2 = $image;
$bild2 = str_replace('ä', 'ae', $bild2);
$bild2 = str_replace('ü', 'ue', $bild2);
$bild2 = str_replace('ö', 'oe', $bild2);
$bild2 = str_replace('Ä', 'Ae', $bild2);
$bild2 = str_replace('Ü', 'Ue', $bild2);
$bild2 = str_replace('Ö', 'Oe', $bild2);
$bild2 = str_replace(' ', '_', $bild2);

if($image != $bild2) {
rename('events/' . $image, 'events/' . $bild2);
return $bild2;
} else {
return $image;
}
}
?>


<?php
$verzeichnis = dir('events'zwinkern;
include('functions.php'zwinkern;

while($bild = $verzeichnis->read()) {
if(eregi('.jpg$', $bild) OR eregi('.jpeg$', $bild)) {
echo "Alt : $bild <br />\n";

$n_bild = rename_image($bild);
echo "Neu : $n_bild <br />\n";
echo "Bytes nach Rename : " . memory_get_usage() . "<br \>\n";

if(!file_exists('thumbs/' . $n_bild)) {
thumb($n_bild);
echo "Thumb erstellt<br /><br />\n\n";
} else {
echo "Thumb existiert bereits<br />\n";
}
echo "Bytes nach Thumb : " . memory_get_usage() . "<br /><br />\n\n";
}
}
?>

Avatar user-255
08.04.2006 19:12

Mach auch mal ein paar Ausgaben innerhalb der Funktion thumb.
Die Dateigröße vom Quellbild wäre auch noch interessant, schließlich stehen dir 12MB zur Verfügung..

Those who can, do. Those who can't, teach. # Musik gehört dem Volk! # last.fm
Avatar user-317
08.04.2006 19:19

Habe ich ausprobiert, aber ich komm gar nicht erst rein. Der Fehler zischt gleich alle Ausgaben weg. Die 3 Testbilder die ich hochgeladen habe :
Rüsselsheim Opel 3.jpg - 1,31MB
Rüsselsheim Opel .jpg - 266KB
Rüsselsheim Opel Fest der Jubiläre.jpg - 287KB
Sagt zumindest mein Explorer etc.

Avatar user-255
08.04.2006 21:43

Bei welcher Funktion tritt der Fehler denn auf? imagecopyresized() ?

Those who can, do. Those who can't, teach. # Musik gehört dem Volk! # last.fm
Avatar user-317
08.04.2006 22:12

<?php
function thumb($image, $folder = 'thumbs', $width = '200', $height = '200'zwinkern {
$size = getimagesize('events/' . $image);
echo 'getimagesize() : ' . memory_get_usage() . "<br />\n";

$text = explode('/', $image);
echo 'explode() : ' . memory_get_usage() . "<br />\n";

$text = $text[1];

$src = imagecreatefromjpeg('events/' . $image);
echo 'imagecreatefromjpeg() : ' . memory_get_usage() . "<br />\n";

$dest = imagecreatetruecolor($width, $height);
echo 'imagecreatetruecolor() : ' . memory_get_usage() . "<br />\n";

$fcol = imagecolorallocate($dest, 255, 255, 255);
echo 'imagecolorallocate() 1 : ' . memory_get_usage() . "<br />\n";

$fcol2 = imagecolorallocate($dest, 0, 0, 0);
echo 'imagecolorallocate() 2 : ' . memory_get_usage() . "<br />\n";


imagecopyresized($dest, $src, 0, 0, 0, 0, $width, $height, $size[0], $size[1]);
echo 'imagecopyresized() : ' . memory_get_usage() . "<br />\n";

imagedestroy($src);
echo 'imagedestroy() 1 : ' . memory_get_usage() . "<br />\n";

imagestring($dest, 3, 10, 11, $text, $fcol2);
echo 'imagestring() 1 : ' . memory_get_usage() . "<br />\n";

imagestring($dest, 3, 10, 9, $text, $fcol2);
echo 'imagestring() 2 : ' . memory_get_usage() . "<br />\n";

imagestring($dest, 3, 11, 10, $text, $fcol2);
echo 'imagestring() 3 : ' . memory_get_usage() . "<br />\n";

imagestring($dest, 3, 9, 10, $text, $fcol2);
echo 'imagestring() 4 : ' . memory_get_usage() . "<br />\n";

imagestring($dest, 3, 10, 10, $text, $fcol);
echo 'imagestring() 4 : ' . memory_get_usage() . "<br />\n";

imagejpeg($dest, $folder, 100);
echo 'imagejpeg() : ' . memory_get_usage() . "<br />\n";

imagedestroy($dest);
echo 'imagedestroy() 2 : ' . memory_get_usage() . "<br />\n";

return TRUE;
}
?>


Laut dem hier ganz oben bei imagecreatefromjpeg.
http://www.mmsky.de/thumb.php

Avatar user-182
08.04.2006 23:39

wenn GARNIX geht, thumbs auf einem entfernten hoster generieren und dann via file_get_contents holen zwinkern

Seid ihr auch schon wix'r? xD
Avatar user-255
09.04.2006 07:11

Das muss ein Bug von PHP sein, denn 52kB + 8kB sind nie und nimmer 12MB... Also entweder holst du dir die neueste Version von PHP oder wenn das schon die neueste ist, schau mal bei den Mailinglisten von PHP.net vorbei.

Those who can, do. Those who can't, teach. # Musik gehört dem Volk! # last.fm
Avatar user-317
09.04.2006 10:23

Wäähhh traurig http://beatboxscene.de/mmsky/thumb.php
Selbes Ergebnis. Hier grad mal die phpinfo()´s von den beiden Servern :
http://beatboxscene.de/info.php
http://mmsky.de/info.php

Ich hab da mal was gelesen, das die GDLib die Bilder unkomprimiert verarbeitet.
Kann es daran liegen, das dann die Bildgröße enorm ansteigt?

Avatar user-182
26.05.2006 18:08

Sorry das ich den Thread nochmal nach oben hole, aber habe gerade etwas recht interessantes gefunden: http://www.cix88.de/projekte/laberbrett/?RID=20060128130914

Ist sicher für den einen oder anderen recht hilfreich lächeln

Seid ihr auch schon wix'r? xD