Ik heb een script geschreven voor een klant die graag zelf foto's op de website wil zetten. Na het testen met verschillende JPEG's leek het script perfect te werken, alleen voor de klant bleek het onmogelijk om een foto te uploaden. De klant blijkt een digitale camera met 5 megapixels te gebruiken en schiet de foto's op volle resolutie. De foto's die gemaakt worden bevatten een JPEG header en footer dus daar kan het niet aan liggen. Ook de bestandsgrootte van ongeveer 1MB is geen probleem (ik heb het geprobeerd met andere JPEG's van min. 2MB). Nu blijkt dat wanneer het formaat van de foto groter is dan 1405x1054 de website over zijn nek gaat en een broken link geeft. 1404x1053 is geen probleem. Is dit een bekend probleem van imagecreatefromjpg of is het een instelling van de server? En heeft iemand een workaround (op dit moment probeer ik imagemagick geinstalleerd te krijgen maar mijn hosting partij doet moeilijk hierover).
Hieronder het script:
Hieronder het script:
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
38
39
40
41
42
43
44
| class Pictures { function Pictures () { set_time_limit ( 0 ); ignore_user_abort ( true ); } function upload ( $files ) { $filename = $files["picture"][ "name" ]; $source = $files["picture"]["tmp_name"]; $this->createThumbnail ( $source, "images/gallery/thumbnails/".$filename ); $this->createPicture ( $source, "images/gallery/".$filename ); } function createPicture ( $source, $destination ) { $myImage = $this->resize ( $source, 480, 360 ); imagejpeg ( $myImage, $destination, 100 ); } function createThumbnail ( $source, $destination ) { $myImage = $this->resize ( $source, 200, 150 ); imagejpeg ( $myImage, $destination, 75 ); } function resize ( $source, $width, $height ) { $mySource = imagecreatefromjpeg ( $source ); $myDestination = imagecreatetruecolor ( $width, $height ); $myInfo = getimagesize ( $source ); imagecopyresampled ( $myDestination, $mySource, 0, 0, 0, 0, $width, $height, $myInfo[ 0 ], $myInfo[ 1 ] ); return $myDestination; } } |