Toon posts:

[PHP] plaatje resizen -> imageJPEG

Pagina: 1
Acties:
  • 106 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
okee, dit is mn probleem: ik wil een plaatje resizen, maar ik kom er niet uit. ik heb het idee dat de functie imageJPEG niet goed werkt. ik heb onderstaande code, voor een groot deel via de post bij [topic=320252/1/25]
Dit is mijn code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?
if(isSet($file)) {
$size = GetImageSize($file);
$aspectRat = (float)($size[1] / $size[0]);

$bron1 = ImageCreateFromJPEG ($file);
$srcX = imagesx($bron1);    
$srcY = imagesy($bron1);      
$dstY = 135 * $aspectRat; 
$maxX = 135;
$dstX  = ($srcX / $aspectRat);    

$new1 = ImageCreateTrueColor($newX1, $newY1);
imagefill($new1, 0, 0, ImageColorAllocate($new1, 255, 255, 255));
imagecopyresampled($new1, $bron1, (($maxX - $dstX) / 2),0,0,0, $dstX, $dstY, $srcX, $srcY);
header("content-type: image/jpeg");
imagejpeg($new1);

$size[0], $size[1]);
}
else {
?>
<html>
<body>
<form enctype="multipart/form-data" method="post" action="image_test.php">
<input type="file" name="file">
<input type="submit" value="ok">
</form>

</body>
</html>
<?php
}
?>

ik krijg met deze code geen plaatje te zien, alleen een broken image zeg maar...

als ik de manual erop nalees, zie ik dat je met imageJPEG ook ook een afbeelding kan opslaan, door als 2e argument een filename te geven en als 3e een kwaliteitspercentage. ik neem aan dat ze dan dus zoiets als imageJPEG($new1, 'test.jpg', 80) bedoelen?? nou, dat werkt ook niet.... iemand een idee? het is uiteindelijk ook de bedoeling dat dit aangepaste plaatje geupload wordt. ik heb gezocht naar verdere posts, maar de codes die ik daar vind lijken hetzelfde als deze hierboven...

edit by chem: niet [code ] maar [php ]
bedankt voor alle reacties!!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 27-08 13:53

chem

Reist de wereld rond

haal die header() eens weg - explorer is een beetje apart en je ziet de error niet: hij interpreteert de boel nu als een afbeelding.

Klaar voor een nieuwe uitdaging.


  • [ti]
  • Registratie: Februari 2000
  • Niet online
PHP:
1
2
3
<?
$new1 = ImageCreateTrueColor($newX1, $newY1);
?>

$newX1 en $newY1 zijn nergens gedefinieerd dus maakt hij een plaatje van 0 bij 0. Gaat niet werken. Als je deze vervangt door andere waardes krijg je iig al output (of dit moet zijn zoals jij het wilt weet ik niet).
PHP:
1
2
3
<?
if(isSet($file))
?>

je 'moet' hier eigenlijk ook is_uploaded_file($file) gebruiken. Anders kunnen niet zo lieve mensen lokale files gaan voeden aan dit script, en dat wil je niet (maakt in dit geval niet zoveel uit maar okee). Leer jezelf gewoon aan om die functie te gebruiken na een file upload.

Ben iig blij dat iemand m'n script toch nog nuttig vond :P

[edit]
Ohja en
PHP:
1
2
3
<?
$size[0], $size[1]);
?>

Is natuurlijk een stukje verloren code die er eigenlijk helemaal niet in thuis hoort, ofwel? :) Zoals chem al zei, als je die header line ff weg haalt krijg je iig te zien of je parse errors oid hebt.

Verwijderd

Topicstarter
ah sorry ik ben een beetje bruut geweest met het pasten van de code... ik had namelijk tussen de regels ook een heeeele hoop commented staan en die had ik snel gedelete toen ik alles poste, maar blijkbaar ben ik iets te snel geweest en heb ik nog wat meer gedelete... :D sorry! ik kijk er ff naar, maar iemand nog verder een idee over het opslaan van de nieuw gemaakte afbeelding door middel van de ImageJPEG functie?

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

int imagejpeg (int im [, string filename [, int quality]])

The filename argument is optional, and if left off, the raw image stream will be output directly
©ImageJpeg

Programmer - an organism that turns coffee into software.


Verwijderd

Topicstarter
Ja ik kan zelf ook de manual lezen, maar zoals ik al eerder zei, als ik iets probeer in de trant van:
PHP:
1
2
3
<?
imageJPEG ($file, 'test.jpg', 10);
?>

dan krijg ik problemen. is het zo dat je alleen een bestaande file kan specificeren?

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Op donderdag 15 november 2001 13:33 schreef zheng123 het volgende:
Ja ik kan zelf ook de manual lezen, maar zoals ik al eerder zei, als ik iets probeer in de trant van:
PHP:
1
2
3
<?
imageJPEG ($file, 'test.jpg', 10);
?>

dan krijg ik problemen. is het zo dat je alleen een bestaande file kan specificeren?
Problemen? Error melding?

Wat doet hij wel en wat doet hij niet?
Heeft het script wel rechten om weg te schrijven in die dir?

MEER INFO!!!

Programmer - an organism that turns coffee into software.


Verwijderd

Topicstarter
error: 'Unable to open ... for writing'

ik heb het tot nu toe op de volgende manieren geprobeerd:
PHP:
1
2
3
4
5
6
7
<?
imageJPEG($new1, 'test.jpg', 10);
imageJPEG($new1, 'http://www.urlvandesite.nl/test.jpg', 10);
imageJPEG($new1, 'd:\lokale\pad\op\de\server\test.jpg', 10);
imageJPEG($new1, 'c:\pad\op\mijn\computer\test.jpg', 10);
imageJPEG($new1, $file, 10);
?>

waarbij $new1 het nieuwe plaatje is en $file het oude plaatje waarmee dus gewerkt is. bij dat laatste voorbeeld heb ik dus geprobeerd om het oude bestand te overschrijven met de nieuwe. ik krijg alleen dan geen error, maar hij overschrijft het niet. ik denk in ieder geval dat hij een bestaand bestand moet hebben. hij kan volgens mij niet een nieuw bestand aanmaken. bij de andere 4 gevallen krijg ik dus bovenstaande foutmelding.

superveel bedankt voor de hulp!

  • [ti]
  • Registratie: Februari 2000
  • Niet online
Heeft de user waaronder PHP draait (IUSR_blabla) wel rechten om te schrijven in die dir?

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Op donderdag 15 november 2001 13:56 schreef zheng123 het volgende:
error: 'Unable to open ... for writing'

ik heb het tot nu toe op de volgende manieren geprobeerd:
PHP:
1
2
3
4
5
6
7
<?
imageJPEG($new1, 'test.jpg', 10);
imageJPEG($new1, 'http://www.urlvandesite.nl/test.jpg', 10);
imageJPEG($new1, 'd:\lokale\pad\op\de\server\test.jpg', 10);
imageJPEG($new1, 'c:\pad\op\mijn\computer\test.jpg', 10);
imageJPEG($new1, $file, 10);
?>

waarbij $new1 het nieuwe plaatje is en $file het oude plaatje waarmee dus gewerkt is. bij dat laatste voorbeeld heb ik dus geprobeerd om het oude bestand te overschrijven met de nieuwe. ik krijg alleen dan geen error, maar hij overschrijft het niet. ik denk in ieder geval dat hij een bestaand bestand moet hebben. hij kan volgens mij niet een nieuw bestand aanmaken. bij de andere 4 gevallen krijg ik dus bovenstaande foutmelding.

superveel bedankt voor de hulp!
Controleer of IUSR_blablah wel genoeg rechten heeft (zie opm [ti])
Bestands namen in windows schrijf je met \\
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?
imageJPEG($new1, 'test.jpg', 10);   // Deze is goed, en zou moeten werken mits IUSR genoeg rechten heeft
imageJPEG($new1, 'http://www.urlvandesite.nl/test.jpg', 10);
// Deze zal nooit werken


//
// Je moet hier eigenlijk de \ escapen door een \ er voor te plaatsen
#imageJPEG($new1, 'd:\lokale\pad\op\de\server\test.jpg', 10);
#imageJPEG($new1, 'c:\pad\op\mijn\computer\test.jpg', 10);


imageJPEG($new1, 'd:\\lokale\\pad\\op\\de\\server\\test.jpg', 10);
imageJPEG($new1, 'c:\\pad\\op\\mijn\\computer\\test.jpg', 10);
?>

Programmer - an organism that turns coffee into software.


Verwijderd

Topicstarter
Okee, na wat nagaan denk ik inderdaad dat het aan de schrijfrechten ligt. De vraag is hoe je die nu aanpast in PHP. Mijn hosting provider is nogal ASP-focused dus ik denk dat als ik vraag: 'willen jullie mijn schrijfrechten voor PHP geven?' dat ze dan zullen zeggen 'ja, maar hoe dan?'.
:) ach ja, het is een goedkope provider :D ze werken overigens met Windows NT servers en IIS. Ik begrijp dus dat je per account verschillende users hebt in de vorm IUSR_NAAM ? Dus hoe pas je de rechten dan precies aan ?

  • [ti]
  • Registratie: Februari 2000
  • Niet online
Als ze PHP vanuit IIS hebben draaien, dan draait PHP dus met de user-permissies van IIS, meestal is dat IUSR_MACHINENAME. Ze moeten dan gewoon de dirs waarin jij wilt schrijven read/write rechten geven aan die ISER_MACHINENAME user.
Pagina: 1