Willkommen auf dem Portal für Mediengestalter
|
|
Autor |
Nachricht |
123456
Threadersteller
Dabei seit: 15.01.2006
Ort: Dresden
Alter: -
Geschlecht:
|
Verfasst Mo 10.11.2008 22:29
Titel [php]Bilder verkleinern klappt nicht korrekt |
|
|
Hallo,
nutze schon seit einiger Zeit das gleiche Bildu-verkleinerungs-script (selbst zusammengewurschtelt) und das klappte bisher immer, nur jetzt in einem anderen Projekt nicht mehr...
Beide erzeugten Bilder sind klein, obwohl eines klein (440x370) und eines groß (800x600) sein müsste.
Original Größe des Bildes ist übrigens bei 2000 x irgendwas...
Es gibt sicher bessere Funktionen als meine, aber sie funktionierte bisher immer und mir ist schleierhaft, warum er beides klein macht. Denn ich wende den 2ten Funktionsaufruf doch auf eine ganz andere Datei an... Oder läuft beim "Copy" was schief?
Verzweifle langsam...
Danke!
Code: |
$Bild1 = $config['BASE_DIR'].'/bildupload/'.$filename; //original datei auf dem server
$Bild2 = $config['BASE_DIR'].'/bildupload/B_'.$filename;
copy($Bild1, $Bild2); //zum original wird noch eine kopie angelegt
bildgroesse(600,800,$Bild2); //aufruf der funktion mit übergabe pfad und gewünschter größe
bildgroesse(370,440,$Bild1);
//und hier die funktion
function bildgroesse($height,$width,$path)
{
$Speicherort = $path;
$datei = GetImageSize($Speicherort);
switch ($datei['mime']) //aktion für passenden dateityp wählen
{
case 'image/jpeg':
$src = imagecreatefromjpeg($Speicherort);
break;
case 'image/gif':
$src = imagecreatefromgif($Speicherort);
break;
case 'image/png':
$src = imagecreatefrompng($Speicherort);
break;
}
$ImageSize=GetImageSize($Speicherort); //Größe anzeigen
if(($width<$datei[0])OR($height<$datei[1]))
{
$FaktorHeight=($height/$ImageSize[1]);
$FaktorWidth=($width/$ImageSize[0]);
if($FaktorHeight>$FaktorWidth)
{
$NewHeight=($FaktorWidth*$ImageSize[1]);
$NewWidth=($FaktorWidth*$ImageSize[0]);
}
else
{
$NewHeight=($FaktorHeight*$ImageSize[1]);
$NewWidth=($FaktorHeight*$ImageSize[0]);
}
}
else
{
$NewHeight=$ImageSize[1];
$NewWidth=$ImageSize[0];
}
$tmp=imagecreatetruecolor($NewWidth, $NewHeight); //Farben
imagecopyresampled($tmp, $src, 0,0,0,0,$NewWidth,$NewHeight,$datei[0],$datei[1]); //resample
switch ($datei['mime']) //Output
{
case 'image/jpeg':
$src = imagejpeg($tmp, $Speicherort, 100); //100=qualität ..0 bis 100 möglich
break;
case 'image/gif':
$src = imagegif($tmp, $Speicherort, 100);
break;
case 'image/png':
$src = imagepng($tmp, $Speicherort, 100);
break;
}
imagedestroy($tmp);
}
|
Zuletzt bearbeitet von 123456 am Mo 10.11.2008 22:31, insgesamt 2-mal bearbeitet
|
|
|
|
|
Darkdragon
Dabei seit: 23.05.2006
Ort: Berlin
Alter: 41
Geschlecht:
|
Verfasst Di 11.11.2008 08:07
Titel
|
|
|
Hat es mit dieser größe immer Funktioniert?? ansonsten würd ich sagen das bild ist zu größ oder der server hat ein zugeringen time-out..
|
|
|
|
|
Anzeige
|
|
|
pixelpapst303
Dabei seit: 06.07.2006
Ort: hamburg
Alter: 50
Geschlecht:
|
Verfasst Di 11.11.2008 10:17
Titel Re: [php]Bilder verkleinern klappt nicht korrekt |
|
|
123456 hat geschrieben: | ... Oder läuft beim "Copy" was schief?
|
setz doch mal dein error_reporting höher und prüfe parallel, ob copy hinhaut. hier steht ein wenig dazu (inkl. prüffunktion)
http://de3.php.net/copy
dass das timeout zu gering ist, würde ich fast nicht vermuten, da du je scheinbar thumbs bekommst... nur halt die falschen. ein versuch, das timeout höher zu setzen, könnte natürlich dennoch nicht schaden...
|
|
|
|
|
Pixelpole
Dabei seit: 25.10.2004
Ort: Trier
Alter: 37
Geschlecht:
|
Verfasst Di 11.11.2008 11:03
Titel
|
|
|
Ich hab jetzt mal nix getestet aber ich liste dir mal ein paar sachen die du umbauen solltest:
1. Die Variablen $datei und $ImageSize. Eine davon kannst du rauswerfen. Du verschwendest verdammt viele Ressourcen damit! Ein getimagesize ist verdammt teuer! Das komplette Bild wird immer jeweils 2 mal in den Speicher geworfen und das ist völlig unnötig.
2. Die zuweisung der Variable Speicherort ist unnötig. Arbeite lieber gleich mit dem parameter $path
3. GetImageSize -> versuch mal getimagesize. Falls bei dir die Zend Engine läuft: Es stand mal zur Diskussion (und es gab auch mal einen patch wenn ich mich recht entsinne) um die funktionsnamen in der Zend Engine case sensitive zu machen. Weiss jetzt allerdings nicht wie der Ausgang der Diskussion war und ob das am Ende wirklich in die Zend Engine mit aufgenommen wurde. Eher unwahrscheinlich aber prüf es trotzdem mal.
Ansonsten lass dir mal den Inhalt der Variablen $NewWidth und $NewHeight einmal ausgeben und hangel dich rückwärts durch deinen Code bis du den Fehler hast. So würdest du die Zeile die was anderes tut als erwartet schnell und effektiv rausfinden. Ich hatte jetzt aber auch ehrlich gesagt keine lust das zu machen.
Hab jetzt mal nur grob drüber gelesen.
Wir sollten hier dringend mal ein "Wie debugge ich meinen Code richtig" FAQ einführen
|
|
|
|
|
123456
Threadersteller
Dabei seit: 15.01.2006
Ort: Dresden
Alter: -
Geschlecht:
|
Verfasst Di 11.11.2008 16:24
Titel
|
|
|
Pixelpole hat geschrieben: | Wir sollten hier dringend mal ein "Wie debugge ich meinen Code richtig" FAQ einführen |
wär cool...
danke erstmal für eure antworten!
hmm hab jetzt alle deine vorgeschlagenen änderungen durchgeführt, aber wieder beide bilder im kleinen format.
hab dann auch noch vor imagecreatetruecolor ein echo eingebaut und es gibt sogar die richtigen werte aus!
Code: |
echo "newwidth: ".$NewWidth." und height: ".$NewHeight." ";
$tmp=imagecreatetruecolor($NewWidth, $NewHeight); //Farben
imagecopyresampled($tmp, $src, 0,0,0,0,$NewWidth,$NewHeight,$datei[0],$datei[1]); //resample
|
gibt korrekt erst "800x600" und danach "440x370" aus
"error_reporting(E_ALL);" bringt keine ausgabe
timeout hochsetzen bringt auch nix
der copy befehl funzt auch - bringt erstens kein false zurück und zweitens existieren ja beide dateien
Zuletzt bearbeitet von 123456 am Di 11.11.2008 16:33, insgesamt 2-mal bearbeitet
|
|
|
|
|
Pixelpole
Dabei seit: 25.10.2004
Ort: Trier
Alter: 37
Geschlecht:
|
Verfasst Di 11.11.2008 16:27
Titel
|
|
|
paste mal deinen momentanen code hier rein und ich schau mir das mal grade genau an. hätte grade ein paar minuten.
|
|
|
|
|
123456
Threadersteller
Dabei seit: 15.01.2006
Ort: Dresden
Alter: -
Geschlecht:
|
Verfasst Di 11.11.2008 16:41
Titel
|
|
|
boah super vielen dank!
wenn der zweite funktionsaufruf auskommentiert wird, macht ers übrigens richtig im 800x600er format
also sowohl das normale und die kopie sind 800x600
dank dir schonmal[/code]
Code: |
$Bild1 = '/bildupload/B_'.$filename;
$Bild2 = '/bildupload/'.$filename;
//$datei = GetImageSize($Speicherort);
bildgroesse(600,800,$Bild2);
if (!copy($Bild2, $Bild1))
{
echo "failed to copy $file...\n";
}
bildgroesse(370,440,$Bild2);
function bildgroesse($height,$width,$path)
{
error_reporting(E_ALL);
$datei = getimagesize($path);
switch ($datei['mime']) //aktion für passenden dateityp wählen
{
case 'image/jpeg':
$src = imagecreatefromjpeg($path);
break;
case 'image/gif':
$src = imagecreatefromgif($path);
break;
case 'image/png':
$src = imagecreatefrompng($path);
break;
}
if(($width<$datei[0])OR($height<$datei[1]))
{
$FaktorHeight=($height/$datei[1]);
$FaktorWidth=($width/$datei[0]);
if($FaktorHeight>$FaktorWidth)
{
$NewHeight=($FaktorWidth*$datei[1]);
$NewWidth=($FaktorWidth*$datei[0]);
}
else
{
$NewHeight=($FaktorHeight*$datei[1]);
$NewWidth=($FaktorHeight*$datei[0]);
}
}
else
{
$NewHeight=$datei[1];
$NewWidth=$datei[0];
}
echo "newwidth: ".$NewWidth." und height: ".$NewHeight." ";
$tmp=imagecreatetruecolor($NewWidth, $NewHeight); //Farben
imagecopyresampled($tmp, $src, 0,0,0,0,$NewWidth,$NewHeight,$datei[0],$datei[1]); //resample
switch ($datei['mime']) //Output
{
case 'image/jpeg':
$src = imagejpeg($tmp, $path, 100); //100=qualität ..0 bis 100 möglich
break;
case 'image/gif':
$src = imagegif($tmp, $path, 100);
break;
case 'image/png':
$src = imagepng($tmp, $path, 100);
break;
}
imagedestroy($tmp);
}
|
Zuletzt bearbeitet von 123456 am Di 11.11.2008 16:42, insgesamt 1-mal bearbeitet
|
|
|
|
|
pixelpapst303
Dabei seit: 06.07.2006
Ort: hamburg
Alter: 50
Geschlecht:
|
Verfasst Di 11.11.2008 16:58
Titel
|
|
|
auf den ersten blick würde ich sagen, dass du derzeit bild2 resized und dann nochmal resized
Code: |
bildgroesse(600,800,$Bild2);
if (!copy($Bild2, $Bild1))
{
echo "failed to copy $file...\n";
}
bildgroesse(370,440,$Bild2);
|
oder?
|
|
|
|
|
|
|
|
Ähnliche Themen |
bilder proportional verkleinern
phpBB Frage - Bilder verkleinern
[php] Bilder während upload verkleinern
Bilder online umrechnen/verkleinern?
Bilder verkleinern > trotzdem scharf
Viele Bilder immer wieder verkleinern
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|