Du bist nicht eingeloggt! Möglicherweise kannst du deswegen nicht alles sehen.
  (Noch kein mods.de-Account? / Passwort vergessen?)
Zur Übersichtsseite
Hallo anonymer User.
Bitte logge dich ein
oder registriere dich!
 Moderiert von: Che Guevara


 Thema: [PHP] Bilder verkleinern ( aber keine Thumbs. )
[1] 2 nächste »
erste ungelesene Seite | letzter Beitrag 
Teufel

AUP Teufel 21.04.2008
Bitte beachten aber keine Thumbs.
Hallo,

ich baue mir gerade ein PHP Script mit dem ich Bilder automatisch verkleinern will wenn sie per $_GET aufgerufen werden.

Das heisst:
Ich lade Bild01.jpg hoch mit den Abmessungen 1024x748.
Ich poste zB in diesem Forum [.img]http://domain.de/bild.php?bild=Bild01.jpg[/img]
Sobald der Server einen Request für das Bild kriegt will ich das Bild verkleinern, und zwar zB auf 800x600.
Das Script ist praktisch fertig, mir fehlt eben nur der Ausschnitt der die Bilder verkleinert, aber:
Es sollen ja keine Thumbs erstellt werden, ich möchte das Originalbild verkleinern.
Ich bin relativ neu bei PHP und kenn mich nicht wirklich aus, deshalb konnte ich mit Google oder Funktionsreferenzen nicht wirklich etwas anfangen.

Wäre schön wenn mir jemand weiterhelfen kann, ich denke für euch ist das kein Problem
01.11.2007 21:32:35  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
*Reeno*

Leet
Verkleinern: imagecopyresized()
Ausgabe: imagepng() (oder eben imagejpg()...)

Im Kommentar "marcy DOT xxx (AT) gmail.com, 02-Jan-2005 08:06" auf http://fr3.php.net/manual/de/function.imagecopyresized.php steht genau das, was du willst.
01.11.2007 22:03:35  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
SoldatOhneSold

Arctic
Das ganze kannst du uebrigens auch Clientseitig mit JavaScript verkleiern, dann muss der Server das nicht immer tun.
 
Code:
var img=document.images[0];
img.setAttribute("width", "600");
img.setAttribute("height", "800");

duerfte dafuer ein Ansatz sein.
01.11.2007 22:08:15  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Teufel

AUP Teufel 21.04.2008
 
Zitat von SoldatOhneSold

Das ganze kannst du uebrigens auch Clientseitig mit JavaScript verkleiern, dann muss der Server das nicht immer tun.
 
Code:
var img=document.images[0];
img.setAttribute("width", "600");
img.setAttribute("height", "800");

duerfte dafuer ein Ansatz sein.



Ich will die Bilder nicht in eine Webseite einbinden, sondern die Datei ausgeben.
Und außerdem ist das eh ne sehr hässliche Lösung, große Bilder laden lassen und dann per Javascript verkleinern Augenzwinkern
01.11.2007 22:26:40  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
SoldatOhneSold

Arctic
 
Zitat von Teufel

 
Zitat von SoldatOhneSold

Das ganze kannst du uebrigens auch Clientseitig mit JavaScript verkleiern, dann muss der Server das nicht immer tun.
 
Code:
var img=document.images[0];
img.setAttribute("width", "600");
img.setAttribute("height", "800");

duerfte dafuer ein Ansatz sein.



Ich will die Bilder nicht in eine Webseite einbinden, sondern die Datei ausgeben.
Und außerdem ist das eh ne sehr hässliche Lösung, große Bilder laden lassen und dann per Javascript verkleinern Augenzwinkern


Sie mag zwar haesslich sein, was sie auch ist, aber hey, sie geht. peinlich/erstaunt
Naja, aber ich verstehe nicht, wieso du die Thumbnails nicht abspeicherst, spaeter ausliest und dann sendest?
Ansonsten wuerde ich den weg von Reeno gehen.
01.11.2007 22:33:20  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Teufel

AUP Teufel 21.04.2008
Ich habs probiert, aber ich kriegs einfach nicht hin.
Meine PHP-Kenntnisse beschränken sich auf ganz poplige Sachen und Bilder verkleinern ist einfach zu kompliziert traurig

Das Script ist hier, falls sich einer von euch erbarmen möchte
01.11.2007 23:47:51  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
*Reeno*

Leet
Was mir sofort auffiel:
*In Zeile 2 benutzt du die Variable $bild, die davor nicht definiert wurde.
*Du rufst dreimal(!!!) getimagesize() auf!
*Du rufst zweimal header() auf.

Übernimm einfach das Skript von php.net und setze davor das:
if (!isset($_GET['image']) || empty($_GET['image'])) {
die('Kein Bild angegeben.');
}

/e:
Und ersetze im Script vom php.net (drittletzte Zeile)
$source = @function_image_create($imgfile);
mit
$source = @$function_image_create($imgfile);
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von *Reeno* am 02.11.2007 0:10]
02.11.2007 0:08:37  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Teufel

AUP Teufel 21.04.2008
Supa, danke schon mal.
Aber was soll ich denn mit $_GET["type"] anfangen?
Sowas hab ich gar nicht.


/e:
 
PHP:
<?
if (!isset($_GET['image']) || empty($_GET['image'])) {
  die('Kein Bild angegeben.');
}
else {
  // switch to find the correct type of function

$imgfile = $_GET["image"];
$type=getimagesize($imgfile);
  switch ($size[2]) {
    case "1": $type="gif";break;
    case "2": $type="jpg";break;
    case "3": $type="png";
  }
Header("Content-type: image/".$type);

switch($type){
default:
    $function_image_create = "ImageCreateFromJpeg";
    $function_image_new = "ImageJpeg";
break;
case "jpg":
    $function_image_create = "ImageCreateFromJpeg";
    $function_image_new = "ImageJpeg";
case "jpeg":
    $function_image_create = "ImageCreateFromJpeg";
    $function_image_new = "ImageJpeg";
break;
case "png":
    $function_image_create = "ImageCreateFromPng";
    $function_image_new = "ImagePNG";
break;
case "gif":
    $function_image_create = "ImageCreateFromGif";
    $function_image_new = "ImagePNG";
break;
}

list($width, $height) = getimagesize($imgfile);

// the new weight of the thumb

$newheight = 600;

// Proportion is maintained

$newwidth = (int) ((1024/($height/$newheight);

$thumb = ImageCreateTrueColor($newwidth,$newheight);
$source = @$function_image_create($imgfile);

ImageCopyResized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

@$function_image_new($thumb);
?>


Zu sehen
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von Teufel am 02.11.2007 11:44]
02.11.2007 11:24:32  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
rABBI

Arctic
 
Zitat von SoldatOhneSold

[...dummfug...]



kannst du mal deinen blöden kopf zumachen? die leute erwarten hier hilfe.

Teufel, schreib dir mal genau auf, was du willst. du wirst merken, dass dir das programmieren und verstehen fertiger programme deutlich leichter fällt, wenn du es mal mit deinen eigenen worten durchformuliert hast.

den switch-teil für type kannst du auf
 
Code:
$function_image_create = "ImageCreateFromJpeg";
    $function_image_new = "ImageJpeg";
reduzieren, da du ja vorraussichtlich nur jpegbilder hast.
02.11.2007 11:46:27  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Teufel

AUP Teufel 21.04.2008
Naja, eben nicht

Hin und wieder fliegt auch ein png oder gif rein und das soll ja auch bearbeitet werden fröhlich

Und wie meinst du aufschreiben? Was ich brauche steht doch im Startpost

Btw: hier liegt das Script aufm Webspace.
02.11.2007 11:53:36  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
rABBI

Arctic
narf. kommado zurück, ich schreibe scheiße.
$_GET["type"]
hast du doch nirgends. und für ein erstes lesen find ich's grad ganz gut. funktionierts denn?

mit aufschreiben meine ich: nicht nur, was es am ende kann, sondern auch, wie es das tut. beispiel:

 
- parameter einlesen (url-zeile)
- bild öffnen
- bildtyp und -größe rausfinden
- bild verkleinern (typ beachten!)
- bild rausschicken



hilft einfach beim verständnis.
02.11.2007 12:01:10  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
FuckFace

Guerilla
 
PHP:
<?php
if (!isset($_GET['image']) || empty($_GET['image'])) {
  exit(
'Kein Bild angegeben.');
}

$imgfile $_GET['image'];
$size=getimagesize($imgfile);
$width $size[0];
$height $size[1];
//Typ herausfinden
switch ($size[2]) {
  case 
"1"
    
$ext="gif";
    
$function_image_create "ImageCreateFromGif";
    
$function_image_new "ImagePNG";
    break;
  case 
"2":
    
$ext="jpg";
    
$function_image_create "ImageCreateFromJpeg";
    
$function_image_new "ImageJpeg";
    break;
  case 
"3":
    
$ext="png";
    
$function_image_create "ImageCreateFromPng";
    
$function_image_new "ImagePNG";
    break;
}

$newheight 600;
//Breite berechnen
$newwidth = ($newheight/$height)*$width;

$newimage ImageCreateTrueColor($newwidth,$newheight);
$oldimage = @$function_image_create($imgfile);
ImageCopyResampled($newimage$oldimage0000$newwidth$newheight$width$height);

//Ausgabe
Header("Content-type: image/".$ext); 
@
$function_image_new($newimage);
?> 

Ist ungetestet, schau's dir also noch mal an. Wenn du das generierte Bild speichern willst, schau dir mal die Parameter von ImageJPG, ImagePNG etc. auf http://de.php.net an.
[Dieser Beitrag wurde 5 mal editiert; zum letzten Mal von FuckFace am 02.11.2007 12:21]
02.11.2007 12:15:21  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Teufel

AUP Teufel 21.04.2008
Jetzt gibt er gar nichts mehr aus:
http://kap.uttx.net/images/?image=Windows-Vista-Aurora-Wallpaper.jpg


Ich hab jetzt ehrlich kenie Möglichkeit mehr da irgendwelche Fehler festzustellen, da ja alles nur weiß ist

/e: Ich bin ja kein Profi, aber muss man das Bild nicht irgendwie ausgeben?
echo file_get_contents($newimage);

funktioniert schon mal nicht traurig
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von Teufel am 02.11.2007 12:42]
02.11.2007 12:35:32  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
FuckFace

Guerilla
 
PHP:
<?php
@$function_image_new($newimage);
?>

Gibt das Bild aus. Also bei mir lokal klappt's. Hab's gerade probiert.
Probier's mal mit 'nem anderen Input.
02.11.2007 12:43:40  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Teufel

AUP Teufel 21.04.2008
Bei mir funktionierts nach wie vor nicht traurig
Hab genau deine Version benutzt, 3 verschiedene Bilder ausprobiert (2jpg, ein png, 2 davon größer als 1024x768).

Hast du evtl irgendeine Einstellung die cih erst ändern müsste?
02.11.2007 12:58:17  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Rufus

AUP Rufus 12.02.2008
...
Zwischenfrage zum Aufrufen einer Funktion durch ne Variable mit deren Namen..

 
Code:
<?
function bar($text) {
	echo $text;
}

$foo = "bar";
$foo("Juhu!");
?>


Hätte nicht gedacht, dass das geht. Hätte das aber schon oft brauchen können. Gibts dafür nen Fachbegriff?
02.11.2007 17:18:39  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
rABBI

Arctic
mir hat's mal jemand als lambda-funktionen erklärt. ob das stimmt: kA.
02.11.2007 18:44:51  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
rABBI

Arctic
 
Zitat von Teufel

Bei mir funktionierts nach wie vor nicht traurig



schau mal in deiner phpinfo, ob du die gb-lib zur verfügung hast. ansonsten mal gd_info() ausgeben lassen.
02.11.2007 18:49:20  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Teufel

AUP Teufel 21.04.2008
GD Support 	enabled 
GD Version 	bundled (2.0.34 compatible)
02.11.2007 19:13:58  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
rABBI

Arctic
und gd_info()? zugriffsrechte auf die datei? genug ram? keine leerzeichen vor dem "<?php"? überall semikolon? all solche kleinen sachen.
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von rABBI am 02.11.2007 19:15]
02.11.2007 19:14:38  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Rufus

AUP Rufus 12.02.2008
...
 
Zitat von rABBI

mir hat's mal jemand als lambda-funktionen erklärt. ob das stimmt: kA.


"Variablenfunktion" reicht schon, danke. Lambda-Funktionen scheinen nach einigem googlen nicht ganz das selbe zu sein..
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von Rufus am 02.11.2007 19:40]
02.11.2007 19:38:02  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Teufel

AUP Teufel 21.04.2008
 
Zitat von rABBI

und gd_info()? zugriffsrechte auf die datei? genug ram? keine leerzeichen vor dem "<?php"? überall semikolon? all solche kleinen sachen.




Ich habe die exakt selbe Version wie von FuckFace gepostet.
Und gd_info() gibt nichts aus traurig

/e http://kap.uttx.net/images/

da ist die version...
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von Teufel am 02.11.2007 19:53]
02.11.2007 19:41:21  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Netbeater

snow
 
Zitat von Rufus

 
Zitat von rABBI

mir hat's mal jemand als lambda-funktionen erklärt. ob das stimmt: kA.


"Variablenfunktion" reicht schon, danke. Lambda-Funktionen scheinen nach einigem googlen nicht ganz das selbe zu sein..



Ich rate von $func($params); ab.. verwende lieber call_user_func bzw. call_user_func_array. In beiden Fällen würde ich vorher ein is_callable aufrufen um zu schauen ob die Funktion auch wirklich existiert.

Lambda-Funktionen sind übrigens anonyme Funktionen, haben also keinen Namen sondern existieren nur solange sie in einer Variable gespeichert sind (create_function erstellt eine Lambda-Funktion)
03.11.2007 2:17:26  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Rufus

AUP Rufus 12.02.2008
 
Zitat von Netbeater

Ich rate von $func($params); ab..


Hat das auch nen Grund, der bei call_user_func nicht zutrifft?
03.11.2007 2:55:34  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Meister Zopf

meister_zopf
Seit PHP 5 kann man dafür auch Reflections verwenden wie in Java:

 
PHP:
<?php

$func 
= new ReflectionFunction($func_name);
$func->invoke();

?>


http://ch2.php.net/manual/de/language.oop5.reflection.php
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von Meister Zopf am 03.11.2007 16:05]
03.11.2007 16:05:33  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Netbeater

snow
 
Zitat von Rufus

 
Zitat von Netbeater

Ich rate von $func($params); ab..


Hat das auch nen Grund, der bei call_user_func nicht zutrifft?



Es ist unübersichtlich. Es ist auf dem ersten Blick nicht klar dass es sich hierbei um ein Funktionsaufruf handelt.
04.11.2007 20:31:57  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
GH@NDI

ghandi2
Ausserdem wunder ich mich, dass wenn soetwas geht, noch kein Scriptkiddie auf die Glorreiche Idee kam einfach mal mittels $_GET['action']() seine Seiten zu gestalten Breites Grinsen

Was viele Hobbyprogrammierer nämlich noch nicht so ganz verstanden haben ist, dass man einer Variable im Grund niemals trauen kann Augenzwinkern
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von GH@NDI am 04.11.2007 22:21]
04.11.2007 22:21:32  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Rufus

AUP Rufus 12.02.2008
 
Zitat von GH@NDI

$_GET['action']()


Irgendwo hört Dynamik ja auch mal auf, schön zu sein.
05.11.2007 1:57:19  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
GH@NDI

ghandi2
Naja, wobei ich früher (vor der großen MVC Welle mit tollen Dispatchern Breites Grinsen) so eine Dynamik mithilfe eines Hashes realisiert habe. Als Keys waren die gültigen Action-Strings gegeben und als Values eben eine entsprechende Methodenreferenz (oder sogar ganze Objekte, je nach Umfang des Projekts).

Blöd ist das also an sich nicht. Man muss halt nur entsprechend für Sicherheit sorgen.
05.11.2007 3:19:07  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
rABBI

Arctic
 
Zitat von Rufus

 
Zitat von GH@NDI

$_GET['action']()


Irgendwo hört Dynamik ja auch mal auf, schön zu sein.



es geht ja auch nicht um schönheit, sondern um dummhaftigkeit.
05.11.2007 3:28:41  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
 Thema: [PHP] Bilder verkleinern ( aber keine Thumbs. )
[1] 2 nächste »

mods.de - Forum » Webdesign & Coding » 

Hop to:  

Thread-Tags:
bilder  php 
| tech | impressum