Vraag & Antwoord

Webprogrammeren & scripting

[PHP] JPG-resize probleem

12 antwoorden
  • Met het volgende script wil ik foto's (.jpg) verkleinen en vervolgens uploaden. Het probleem is echter dat ik keurig een verkleinde foto krijg maar uploaden doet hij niet. Wat is er mis? <? require("../Cart.php"); Root(); $file = $image; if ($image) { $new_w = 150; $new_h = 100; $dir = "$WebRoot/images/"; $new_filename = "$ArtikelID.jpg"; if (file_exists($file)) { $img = ImageCreateFromJPEG($file); $height = ImageSY($img); $width = ImageSX($img); $new_img = imageCreate($new_w,$new_h); imagecopyresized($new_img, $img, 0, 0, 0, 0, $new_w, $new_h, $width, $height); ImageJPEG($new_img); ImageJPEG($new_img, '$new_filename'); exec("mv [b:8b16a52d58]$new_img[/b:8b16a52d58] '$WebRoot/images/".$ArtikelID.".jpg'"); } } ?> Maar als je van de laatste regel dit maakt: exec("mv [b:8b16a52d58]$image[/b:8b16a52d58] '$WebRoot/images/".$ArtikelID.".jpg'"); Wordt de grote foto die op de PC staat ge-upload, maar hoe kan de verkeinde foto uploaden?
  • Probeer eens:[code:1:f57d648eca]error_reporting(E_ALL);[/code:1:f57d648eca] bovenaan je script te zetten. Dan zie je echt alle errors en warnings, misschien geeft dat een hint. En je script zit wat vreemd in elkaar, de ene keer doe je quotes om een variabele, dan weer niet, dan weer wel en niet in één regel. Ow nog wat: uploaden en verplaatsen is heel wat anders ;)
  • Ik krijg geen errors te zien; ik krijg het verkleinde plaatje op mijn scherm. De bedoeling is dat ik de grote foto's die op mijn PC staan m.b.v. een phpscript kan verkleinen naar 150x100px en vervolgens wordt de jpg van 150x100 ge-upload naar de map images in mijn FTP. Maar dat uploaden lukt niet.
  • Probeer het eens zonder het verkleinde plaatje op het scherm te toveren, dan kun je zien of er iets mis gaat (in de vorm van een error message of zo).
  • Als ik het kleine plaatje weg is, krijg ik een leeg wit scherm met niks erin. Maar er wordt ook geen foto ge-upload.
  • En die grote foto komt dus wel in de "images" map te staan als je dat dus aanpast zoals je zei in je eerste post? Owwww, volgens mij zie ik het: moet het geen[code:1:2b5cfa5030]exec("mv $new_filename ...[/code:1:2b5cfa5030] zijn (ipv $new_img)? Je geeft hem tenslotte die naam, en mv doet niets anders dan een file verplaatsen...
  • Nee dat werkt helaas ook niet. Maar het is eigen toch raar: de dir en new_filename staan ook al in: [code:1:c0ebe9d360]exec("mv $new_img '$WebRoot/images/".$ArtikelID.".jpg'");[/code:1:c0ebe9d360] terwijl ze bovenaan het script staan als $dir en $new_filename.
  • En toch zit het hem in bovenstaande... Volgens mij wordt er bij die ImageJPG(... ...) een file in de tmp dir geplaatst, vanuit daar moet je die moven. Nu verplaats je een imagestream (of zoiets) en geen bestand. Die stream naar de browser sturen werkt perfect, maar je kan hem niet verplaatsen, omdat het geen bestand is. Die $image is wel een bestand en dus kan je die wel verplaatsen (waarschijnlijk is dat ook een link in de vorm van /tmp/bla.jpg of zo).
  • Maar kan ik die '$new_img' (want die maakt er een kleiner plaatje van) in de temp krijgen? Het script is na veel proberen als volgt: [code:1:d2fde339c9] <? require("../Cart.php"); Root(); error_reporting(E_ALL); $file = $image; if ($image) { $new_w = 150; $new_h = 100; $dir = "$WebRoot/images/"; if (file_exists($file)) { $img = ImageCreateFromJPEG($file); $height = ImageSY($img); $width = ImageSX($img); $new_img = imageCreate($new_w,$new_h); imagecopyresized($new_img, $img, 0, 0, 0, 0, $new_w, $new_h, $width, $height); ImageJPEG($new_img); exec("mv $new_img '$WebRoot/images/".$ArtikelID.".jpg'"); } } ?> [/code:1:d2fde339c9]
  • Je moet dan een tweede parameter aan die "imagejpeg" functie meegeven. Dan wordt de image opgeslagen (waar percies is altijd de vraag ;)). Pas dan kan je hem verplaatsen. Je hebt kans dat "imagejpeg($new_img, "filename.jpg")" niet werkt, omdat je dan weer geen schrijfrechten hebt in de huidige directory (althans, Apache niet). Als dat dus niet werkt, moet je eens "/tmp/filename.jpg" proberen. En ow ja, vergeet het plaatje niet weer te [url=http://php.nederland.net/manual/en/function.unlink.php]deleten[/url] nadat (!!) je hem verplaatst hebt uit de tijdelijke directory, anders gaat je host boos op je worden :) [edit] En dan komt bij die "mv" actie natuurlijk bovengenoemde "filename.jpg" (inclusief de /tmp als dat nodig blijkt te zijn en niet meer $img_new of zo. [/edit]
  • Dus jij bedoelt dit: [code:1:9d95292dbc] <? require("../Cart.php"); Root(); error_reporting(E_ALL); $file = $image; if ($image) { $new_w = 150; $new_h = 100; $dir = "$WebRoot/images/"; if (file_exists($file)) { $img = ImageCreateFromJPEG($file); $height = ImageSY($img); $width = ImageSX($img); $new_img = imageCreate($new_w,$new_h); imagecopyresized($new_img, $img, 0, 0, 0, 0, $new_w, $new_h, $width, $height); ImageJPEG($new_img, '/tmp/".$ArtikelID.".jpg'); exec("mv '$WebRoot/images/".$ArtikelID.".jpg'"); } } ?> [/code:1:9d95292dbc] PS: Die link van 'deleten' werkt niet helemaal.
  • 1) Nee.[code:1:9455cc4985]$filename = "/tmp/" . $ArtikelID ."jpg"; ImageJPEG($new_img, $filename); exec("mv $filename '$WebRoot/images/".$ArtikelID.".jpg'");[/code:1:9455cc4985]Je moet natuurlijk wel twee files opgeven bij een "move" actie.... 2) Ach ja, soms is de manual stuk ;) Maar ik zie net dat je de boel toch niet hoeft te removen, omdat je hem verplaatst en niet kopieert (tis warm heh? ;)). Trouwens: die "mv" werkt wel alleen onder Linux/Unix. Het is maar dat je het weet ;)

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.