|
|
|
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
|
|
|
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
|
| 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
|
|
|
|
|
|
|
| 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
| |
Sie mag zwar haesslich sein, was sie auch ist, aber hey, sie geht.
Naja, aber ich verstehe nicht, wieso du die Thumbnails nicht abspeicherst, spaeter ausliest und dann sendest?
Ansonsten wuerde ich den weg von Reeno gehen.
|
|
|
|
|
|
|
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
Das Script ist hier, falls sich einer von euch erbarmen möchte
|
|
|
|
|
|
|
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]
|
|
|
|
|
|
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]
|
|
|
|
|
|
| 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.
|
|
|
|
|
|
|
Naja, eben nicht
Hin und wieder fliegt auch ein png oder gif rein und das soll ja auch bearbeitet werden
Und wie meinst du aufschreiben? Was ich brauche steht doch im Startpost
Btw: hier liegt das Script aufm Webspace.
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
|
|
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, $oldimage, 0, 0, 0, 0, $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]
|
|
|
|
|
|
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
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von Teufel am 02.11.2007 12:42]
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
|
Bei mir funktionierts nach wie vor nicht
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?
|
|
|
|
|
|
|
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?
|
|
|
|
|
|
|
|
|
|
|
| Zitat von Teufel
Bei mir funktionierts nach wie vor nicht
| |
schau mal in deiner phpinfo, ob du die gb-lib zur verfügung hast. ansonsten mal gd_info() ausgeben lassen.
|
|
|
|
|
|
|
GD Support enabled
GD Version bundled (2.0.34 compatible)
|
|
|
|
|
|
|
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]
|
|
|
|
|
|
"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]
|
|
|
|
|
|
| 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
/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]
|
|
|
|
|
|
| Zitat von Rufus
"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)
|
|
|
|
|
|
|
| Zitat von Netbeater
Ich rate von $func($params); ab..
| |
Hat das auch nen Grund, der bei call_user_func nicht zutrifft?
|
|
|
|
|
|
|
|
|
|
|
| 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.
|
|
|
|
|
|
|
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
Was viele Hobbyprogrammierer nämlich noch nicht so ganz verstanden haben ist, dass man einer Variable im Grund niemals trauen kann
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von GH@NDI am 04.11.2007 22:21]
|
|
|
|
|
|
| Zitat von GH@NDI
$_GET['action']()
| |
Irgendwo hört Dynamik ja auch mal auf, schön zu sein.
|
|
|
|
|
|
|
Naja, wobei ich früher (vor der großen MVC Welle mit tollen Dispatchern ) 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.
|
|
|
|
|
|
|
| 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.
|
|
|
|
|
|
Thema: [PHP] Bilder verkleinern ( aber keine Thumbs. ) |