[PHP] Image verkleinen mbv GD, maar grootte is hetzelfde

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • XiN-eViL
  • Registratie: Maart 2004
  • Laatst online: 29-08 10:13

XiN-eViL

kzie-nie-veel

Topicstarter
Ik gebruik dus GD om afbeeldingen te verkleinen. Ze staan in iets van 1280 x 960 op mn site, en ik stuur ze aan de mensen door in 800 x 600.

Ik gebruik het volgende scriptje:
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
35
36
37
<?php

$filename = 'images/' . $_GET['file'] . '.jpg';

header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); // required for certain browsers 
header("Content-Type: image/jpg");
header("Content-Disposition: attachment; filename=".basename($filename).";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filename));


$plaatje = ImageCreatefromjpeg($filename);

$zwart   = ImageColorAllocate($plaatje, 0, 0, 0); 
$wit     = ImageColorAllocate($plaatje, 255, 255, 255);

$image_w = imagesx($plaatje);
$image_h = imagesy($plaatje);
$imgw=800;
$imgh=600;

$plaatje2 = Imagecreatetruecolor($imgw,$imgh);

imagecopyresampled($plaatje2,$plaatje,0,0,0,0,$imgw,$imgh,$image_w,$image_h);

imagefilledrectangle($plaatje2, $imgw - (8 * strlen('(c) 2005 XiN-eViL')), $imgh-15, $imgw, $imgh, $zwart);  
Imagestring($plaatje2, 4, $imgw - (8 * strlen('(c) 2005 XiN-eViL')), $imgh-15, '(c) 2005 XiN-eViL', $wit);

imageJPEG($plaatje2);

imageDestroy($plaatje);
imageDestroy($plaatje2);

?> 


Maar nu worden mn afbeeldingen wel kleiner, maar de bestandsgrootte verandert niet (hij blijft bijv. 256 kb).
Hoort dit of doe ik iets fout?

Acties:
  • 0 Henk 'm!

  • brute51
  • Registratie: Augustus 2001
  • Laatst online: 07-08 23:35
XiN-eViL schreef op zaterdag 26 februari 2005 @ 15:00:
Ik gebruik dus GD om afbeeldingen te verkleinen. Ze staan in iets van 1280 x 960 op mn site, en ik stuur ze aan de mensen door in 800 x 600.

...

Maar nu worden mn afbeeldingen wel kleiner, maar de bestandsgrootte verandert niet (hij blijft bijv. 256 kb).
Hoort dit of doe ik iets fout?
euh... je slaat je image bestanden toch nie op nadat je ze hebt verkleind? dan vind ik het niet gek dat de originele nog even veel ruimte innemen als daarvoor... of bedoel je dat je kijkt bij de eigenschappen van zo'n plaatje (en dus niet op je webserver)?

Ik heb echt een hele goeie PC.


Acties:
  • 0 Henk 'm!

  • simon
  • Registratie: Maart 2002
  • Laatst online: 00:18
brute51 schreef op zaterdag 26 februari 2005 @ 15:03:
[...]


euh... je slaat je image bestanden toch nie op nadat je ze hebt verkleind? dan vind ik het niet gek dat de originele nog even veel ruimte innemen als daarvoor... of bedoel je dat je kijkt bij de eigenschappen van zo'n plaatje (en dus niet op je webserver)?
Ik denk de filesize van de files die bij de client aankomt...

|>


Acties:
  • 0 Henk 'm!

  • XiN-eViL
  • Registratie: Maart 2004
  • Laatst online: 29-08 10:13

XiN-eViL

kzie-nie-veel

Topicstarter
brute51 schreef op zaterdag 26 februari 2005 @ 15:03:
[...]


euh... je slaat je image bestanden toch nie op nadat je ze hebt verkleind? dan vind ik het niet gek dat de originele nog even veel ruimte innemen als daarvoor... of bedoel je dat je kijkt bij de eigenschappen van zo'n plaatje (en dus niet op je webserver)?
Wat ik doe:
- ik kijk via ftp hoe groot hij is.
- ik download hem mbv bovenstaand script en kijk hoe groot hij is
- ik constateer dat dit even groot is
- ik snap er niks van
- ik vraag het hier :P

Acties:
  • 0 Henk 'm!

  • PipoDeClown
  • Registratie: September 2000
  • Niet online

PipoDeClown

Izze Zimpell

regel 12? oftewel je stuurt de grootte van het origineel mee als filesize

[ Voor 79% gewijzigd door PipoDeClown op 26-02-2005 15:09 ]

God weet alles, want hij is lid van de Mosad. To protect your freedom i will take that away from you. Mijn drankgebruik heeft ernstig te lijden onder mijn gezondheid.


Acties:
  • 0 Henk 'm!

  • XiN-eViL
  • Registratie: Maart 2004
  • Laatst online: 29-08 10:13

XiN-eViL

kzie-nie-veel

Topicstarter
PipoDeClown schreef op zaterdag 26 februari 2005 @ 15:08:
regel 12? oftewel je stuurt de grootte van het origineel mee als filesize
OMG OMG OMG ok ik KOPIEER NOOIT MEER letterlijk een script :P

Edit:
idd dit werkte. THX O+

Edit2:
Hoe krijg ik nu dat ie de goede grootte meezend? Want anders staat er onbekend bestandstype bij het downloaden :P .

[ Voor 26% gewijzigd door XiN-eViL op 26-02-2005 15:15 ]


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:29

crisp

Devver

Pixelated

strlen($plaatje2)

en verder zou ik ook wat controles inbouwen op je GET-var, en een file_exits() voordat je gaat verkleinen ;)

Als dit script veelvuldig gebruikt gaat worden voor dezelfde plaatjes zou ik ook overwegen om de 800x600 versies apart op te slaan.

[ Voor 35% gewijzigd door crisp op 26-02-2005 15:35 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • XiN-eViL
  • Registratie: Maart 2004
  • Laatst online: 29-08 10:13

XiN-eViL

kzie-nie-veel

Topicstarter
crisp schreef op zaterdag 26 februari 2005 @ 15:34:
strlen($plaatje2)

en verder zou ik ook wat controles inbouwen op je GET-var, en een file_exits() voordat je gaat verkleinen ;)

Als dit script veelvuldig gebruikt gaat worden voor dezelfde plaatjes zou ik ook overwegen om de 800x600 versies apart op te slaan.
strlen($plaatje2) geeft altijd 518 bytes terug :?
en hij zegt nog steeds onbekend bestandstype ipv jpeg image, hoe komt dat?
voorbeeld:
Afbeeldingslocatie: http://www.xin-evil.com/download.jpg

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:29

crisp

Devver

Pixelated

My bad; $plaatje2 is enkel een resource identifier, geen string.
Je zou het met behulp van output buffering kunnen doen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); // required for certain browsers 
header("Content-Type: image/jpg");

ob_start();

// rest van het script

imageJPEG($plaatje2);

imageDestroy($plaatje);
imageDestroy($plaatje2);

$size = ob_get_length();

header("Content-Disposition: attachment; filename=".basename($filename).";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".$size);

ob_end_flush();

[ Voor 15% gewijzigd door crisp op 26-02-2005 16:09 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • XiN-eViL
  • Registratie: Maart 2004
  • Laatst online: 29-08 10:13

XiN-eViL

kzie-nie-veel

Topicstarter
crisp schreef op zaterdag 26 februari 2005 @ 16:05:
My bad; $plaatje2 is enkel een resource identifier, geen string.
Je zou het met behulp van output buffering kunnen doen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); // required for certain browsers 
header("Content-Type: image/jpg");

ob_start();

// rest van het script

imageJPEG($plaatje2);

imageDestroy($plaatje);
imageDestroy($plaatje2);

$size = ob_get_length();

header("Content-Disposition: attachment; filename=".basename($filename).";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".$size);

ob_end_flush();
OK de size werkt nu, alleen zegt hij nog steeds onbekend bestandstype :? :? :?
Hoe kan ik dit verhelpen, als dat al mogelijk is.

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:29

crisp

Devver

Pixelated

Hier lokaal krijg ik zowel in IE als in Firefox wel het juiste bestandstype te zien hoor :?

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

XiN-eViL schreef op zaterdag 26 februari 2005 @ 16:08:
[...]
OK de size werkt nu, alleen zegt hij nog steeds onbekend bestandstype :? :? :?
Hoe kan ik dit verhelpen, als dat al mogelijk is.
PHP:
1
header("Content-Type: image/jpeg");


Go figure

Acties:
  • 0 Henk 'm!

  • XiN-eViL
  • Registratie: Maart 2004
  • Laatst online: 29-08 10:13

XiN-eViL

kzie-nie-veel

Topicstarter
Verwijderd schreef op zaterdag 26 februari 2005 @ 16:36:
[...]

PHP:
1
header("Content-Type: image/jpeg");


Go figure
Al geprobeerd, maar werkt niet.

Edit:
Het lag dus idd aan deze pc, hij had geen omschrijving voor jpg bestandjes.

[ Voor 19% gewijzigd door XiN-eViL op 26-02-2005 18:28 ]

Pagina: 1