php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
bild hochladen und verkleinern


 
magman
13-01-2004, 18:33 
 
Hi!

Folgendes:
Ich lade mit einem Formular ein Bild hoch. Dieses wird auf dem Server gespeichert und anschließend verkleinert (Breite 220, Höhe proportional dazu). Dies funktioniert so weit ganz gut. Nun kommt es bei manchen Bildern vor, dass auf dem Server nur ein schwarzes Bild abgelegt ist. Woran kann das liegen dass es bei manchen Bildern geht, und bei anderen nicht. Leider konnte ich keine regelmäßigkeit feststellen, wann es geht und wann nicht. Nachfolgender Code ist für das ganze zuständig...

Über eure Hilfe würde ich mich freuen!

PS: Das ganze liegt auf einem 1&1 Webspace! Ich habe also keine GD2 Lib! Sonder nur die 1.6.


Danke


$bildpfad = "./bilder_objekte/".$_REQUEST['id'].".jpg";
copy($_FILES['bild']['tmp_name'], $bildpfad);

$quellbild = $bildpfad;

$info=getimagesize("$quellbild");
$breitalt=$info[0];
$hochalt=$info[1];

$breit="220";
$hoch=ceil($hochalt*$breit/$breitalt);

$bildalt=imagecreatefromjpeg($quellbild);
$bildneu=imagecreate($breit,$hoch);
imagecopyresized($bildneu,$bildalt,0,0,0,0,$breit,$hoch,$breitalt,$hochalt);
imagejpeg($bildneu,$quellbild);

 
Wurzel
13-01-2004, 19:25 
 
kann es sein, dass du ab und an ein CMYK bild lädtst ... oder eines mit
alpha-kanal oder mit pfad?

 
magman
13-01-2004, 19:28 
 
dürfte normal nicht der fall sein, da alle bilder mit der gleichen digicam gemacht werden...
vom format,... sind es also immer die gleichen bilder!

 
Wurzel
13-01-2004, 19:36 
 
schau dir mal die user-notes im manual an http://de.php.net/manual/de/function.imagecopyresized.php, scheint so als gäbs schonmal "farbfehler" ... die lösung steht da auch ;)

 
magman
13-01-2004, 20:32 
 
ich hab mir das jetzt mal durchgelesen und verschiedene sachen getestet! ich bin jetzt soweit dass ich bei einem normalen bild, das vorher auch ging, wesentlich bessere farben erhalte. schwarze bilder hatte ich bis jetzt noch keine...

sollte alles funktionieren geht ein rießen dank an dich... !!!!!


DANKE !!!!!!!!!!!!!!

 
magman
14-01-2004, 15:09 
 
also das problem besteht noch immer... :-(

hab noch jemand eine idee waran es liegen könnte?

 
Wurzel
14-01-2004, 15:17 
 
kannst du das problem nicht näher einkreisen?
- welche gemeinsamkeiten haben die bilder, die nicht gehen?
- läuft der code zB in einer schleife, so dass mehrere bilder hintereinander bearbeitet werden? => imagedestroy() nicht vergessen
- ...

 
magman
14-01-2004, 15:30 
 
schleife nein!
das ist auch nur ein bild das immer hochgeladen wird!
imagedestroy hab ich ja nicht, da ich ein bild hochlade und das dann verkleinere...
ich lasse mir jetzt mal bilder zuschicken die nicht gehen. ich lade die nämlich nicht hoch, das machen andere!

 
Wotan
14-01-2004, 15:39 
 
Schau dir mal diesen Beitrag an:
http://www.php-resource.de/forum/showthread.php?s=&postid=53929#post53929

 
magman
14-01-2004, 16:00 
 
habe mir den beitrag durchgelesen, finde aber keine lösung für mein problem! an was hattest du gedacht?

 
Wotan
14-01-2004, 16:20 
 
Das hier:

<?
// Bild klein
$K_MB = 100;
$K_MH = 150;

// Bild gross
$G_MB = 200;
$G_MH = 300;

if (!isset($abdiepost))
{
?>
<FORM ENCTYPE="multipart/form-data" ACTION="<?PRINT $PHP_SELF;?>" METHOD=POST>
<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="100000">
Send this file: <INPUT NAME="UPLOADPIC" TYPE="file"><br>
Pic Name: <INPUT TYPE="TEXT" NAME="pic"><br>
<INPUT TYPE="submit" NAME="abdiepost" VALUE="Send File">
</FORM>
<?
}
else
{

$k_size = getimagesize ("$UPLOADPIC");
$g_size = getimagesize ("$UPLOADPIC");

$G_UPLOADPIC = "$UPLOADPIC";
$K_UPLOADPIC = "$UPLOADPIC";

// Schauen wir mal, ob wir das Bild verkleinen müssen
// Zuerst ob die maximale Breite nicht überschritten wird

// Verarbeitung kleines Bild
if ($k_size[0] < $K_MB)
{
// Also die Breite passt, da müssen wir nix tun
$K_NB = $k_size[0];
$K_NH = $k_size[1];
}
else
{
// Jetzt ist also Handlungsbedarf
// Also berechnen wir den Faktor, damit wir auch die Höhe hinkriegen
$ProportionFaktor = $k_size[0] / $K_MB;
$K_NB = $K_MB;
$K_NH = round($k_size[1] / $ProportionFaktor);
}

// Verarbeitung grosses Bild
if ($g_size[0] < $G_MB)
{
// Also die Breite passt, da müssen wir nix tun
$G_NB = $g_size[0];
$G_NH = $g_size[1];
}
else
{
// Jetzt ist also Handlungsbedarf
// Also berechnen wir den Faktor, damit wir auch die Höhe hinkriegen
$GProportionFaktor = $g_size[0] / $G_MB;
$G_NB = $G_MB;
$G_NH = round($g_size[1] / $GProportionFaktor);
}

// So das mit der Breite hätten wir, nun die Höhe

// Verarbeitung kleines Bild
if ($K_NH < $K_MH)
{
// Also die Hoehe passt, da müssen wir nix tun
}
else
{
// Jetzt ist also Handlungsbedarf
// Also berechnen wir den Faktor, damit wir auch die Höhe hinkriegen
$ProportionFaktor = $K_NH / $K_MH;
$K_NH = $K_MH;
$K_NB = round($K_NB / $ProportionFaktor);
}

// Verarbeitung grosses Bild
if ($G_NH < $G_MH)
{
// Also die Hoehe passt, da müssen wir nix tun
}
else
{
// Jetzt ist also Handlungsbedarf
// Also berechnen wir den Faktor, damit wir auch die Höhe hinkriegen
$GProportionFaktor = $G_NH / $G_MH;
$G_NH = $G_MH;
$G_NB = round($G_NB / $GProportionFaktor);
}

// Und jetzt geht es munter weiter <img src="images/smilies/biggrin.gif" border="0" alt="">

// Verarbeitung kleines Bild
if ($k_size[0] == $K_NB && $k_size[1] == $K_NH)
{
$UPLOADPIC_name = "$pic-klein.jpg";
// Da mußte das Bild nicht verkleinert werden
copy ($K_UPLOADPIC, "images/klein/$UPLOADPIC_name");
echo "$pic-klein.jpg = pic<br>bild kann so bleiben<br><hr>";
}
else
{
$UPLOADPIC_name = "$pic-klein.jpg";
// Hier wird PIC verkleinert und gespeichert
$td=imageCreateTrueColor($K_NB, $K_NH);
$ts=imageCreateFromJPEG($K_UPLOADPIC);
imageCopyResampled($td, $ts, 0, 0, 0, 0, $K_NB, $K_NH, $k_size[0], $k_size[1]);
imageJPEG($td,"images/klein/$UPLOADPIC_name");
echo "$pic-klein.jpg = pic<br>Bild musste geändert werden!<br><hr>";
}

// Verarbeitung grosses Bild
if ($g_size[0] == $G_NB && $g_size[1] == $G_NH)
{
$UPLOADPIC_name = "$pic-gross.jpg";
// Da mußte das Bild nicht verkleinert werden
copy ($G_UPLOADPIC, "images/gross/$UPLOADPIC_name");
echo "$pic-gross.jpg = pic<br>bild kann so bleiben";
}
else
{
$UPLOADPIC_name = "$pic-gross.jpg";
// Hier wird PIC verkleinert und gespeichert
$td1=imageCreateTrueColor($G_NB, $G_NH);
$ts1=imageCreateFromJPEG($G_UPLOADPIC);
imageCopyResampled($td1, $ts1, 0, 0, 0, 0, $G_NB, $G_NH, $g_size[0], $g_size[1]);
imageJPEG($td1,"images/gross/$UPLOADPIC_name");
echo "$pic-gross.jpg = pic<br>Bild musste geändert werden!";
}
}
?>

Da hast du doch alles was du brauchst. Komplett funktionierender Code für JPG´s. Und da gibt es keine schwarzen Bilder.

 
magman
15-01-2004, 13:04 
 
so, ich habe nun herausgefunden woran es liegt! die bilder die schwarz werden sind alle ziemlich groß! 1600*1400 und ca. 600kb!

jetzt weiß ich allerdings nicht an welchem wert es genau liegt! die Bytegröße ist ja eigentlich nur durch die php.ini eingeschränket, oder? und darin steht der wert auf 20M! also müsste es an den abmessungen des bildes liegen! könnt ihr mir sagen ob es da evtl. eine maximale größe gibt, bis zu der die gd lib bilder bearbeiten kann?

danke

 
magman
15-01-2004, 13:14 
 
also, es liegt definitiv an den abmessungen des bildes!
ich hatte ein bild mit den abmessungen 1200x1600. dieses wurde beim upload schwarz.
nachdem ich es nur sehr gering auf 1150x1533 verkleinert habe, ging es. nach wiederholtem vergrößern (zur kontrolle) auf 1200x1600 geht es wieder nicht!

man lernt nie aus....!!

 
Wurzel
15-01-2004, 13:24 
 
kannst du mal so ein bild irgendwo online stellen ... bei meiner
img-resize-classe laufen auch grössere bilder... ohne sich schwarz
zu färben

 
magman
15-01-2004, 13:49 
 
das wird zum beispiel schwarz!

 
Wurzel
15-01-2004, 13:52 
 
bei mir nicht :p ... du solltest dir dein script nochmal vorknöpfen ;)

 
magman
15-01-2004, 14:18 
 
hmmm... das ist komisch...! dann muss es irgendwie am script liegen! aber wo soll der fehler sein :confused:

HILFE !!!!!!!!!!

 
Wurzel
15-01-2004, 14:25 
 
warum testest du nicht mal den schnipsel von wotan ^^

 
rmxdesignz
22-07-2008, 22:52 
 
hallo, das code schnippsel von Wotan ist echt super. funktioniert einwadnfrei... nun meine Frage; kann man das auch per Multiple-Choice hochladen, also mehrere Upload-Felder...gleichzetig...?

würde mich über eine antwort freuen.

 
TobiaZ
23-07-2008, 00:01 
 
Spricht erstmal nichts dagegen, du musst halt mehrere Felder ins Formular einbauen und das Script um eine entsprechende Schleife erweitern.

Ohne die Erweiterung geht's nicht.

Dazu solltest du beachten, dass der knappe 4 1/2 Jahre alt ist. In der Zeit hat sich ein bisschen was getan, so dass das Script da nicht mehr ganz state of the art ist.


Alle Zeitangaben in WEZ +2. Es ist jetzt 03:27 Uhr.