FAQ |
Kalender |
![]() |
#1 | ||
|
|||
Flitig postare
|
Tjena,
har ett litet dilemma, har en kund som ligger på webbhotellet one.com (skit hotell) och jag har byggt ett bild galleri åt kunden. När kunden laddar upp bilder så skapas två filer, en 100 x 100 px och en 500 x ? px bild. Problemet är att, eller jag tror efter lite bråk med One's support att deras memory_limit är för låg. Att beskära och bearbeta bilder med PHP tar en hel del resurser, det vet vi. Men hur kan man lösa detta. One vägrar att öka sin limit på memory_limit. memory_limit ligger för tillfället på 12 MB och jag har bara problem när jag laddar upp bilder som är större än 1100 px breda. Det som verkar vara stopp klossen är ImageCreateFromJpeg() Kan man lösa detta på annat sätt? http://hotelpictures.com |
||
![]() |
![]() |
![]() |
#2 | ||
|
|||
Flitig postare
|
Här har ni funktionen jag använder mig av för att beskära bilderna. Fungerar helt smärtfritt på alla andra webbhotell jag kör på.
Kod:
function resizeImage($src, $dst, $dstx, $dsty){ $allowedExtensions = 'jpg jpeg gif png'; $name = explode(".", $src); $currentExtensions = $name[count($name)-1]; $extensions = explode(" ", $allowedExtensions); for($i=0; count($extensions)>$i; $i=$i+1){ if($extensions[$i]==$currentExtensions) { $extensionOK=1; $fileExtension=$extensions[$i]; break; } } if($extensionOK){ $size = getImageSize($src); $width = $size[0]; $height = $size[1]; if($width >= $dstx AND $height >= $dsty){ $proportion_X = $width / $dstx; $proportion_Y = $height / $dsty; if($proportion_X > $proportion_Y ){ $proportion = $proportion_Y; }else{ $proportion = $proportion_X; } $target['width'] = $dstx * $proportion; $target['height'] = $dsty * $proportion; $original['diagonal_center'] = round(sqrt(($width*$width)+($height*$height))/2); $target['diagonal_center'] = round(sqrt(($target['width']*$target['width'])+ ($target['height']*$target['height']))/2); $crop = round($original['diagonal_center'] - $target['diagonal_center']); if($proportion_X < $proportion_Y ){ $target['x'] = 0; $target['y'] = round((($height/2)*$crop)/$target['diagonal_center']); }else{ $target['x'] = round((($width/2)*$crop)/$target['diagonal_center']); $target['y'] = 0; } if($fileExtension == "jpg" OR $fileExtension=='jpeg'){ $from = ImageCreateFromJpeg($src); }elseif ($fileExtension == "gif"){ $from = ImageCreateFromGIF($src); }elseif ($fileExtension == 'png'){ $from = imageCreateFromPNG($src); } $new = ImageCreateTrueColor ($dstx,$dsty); imagecopyresampled ($new, $from, 0, 0, $target['x'], $target['y'], $dstx, $dsty, $target['width'], $target['height']); if($fileExtension == "jpg" OR $fileExtension == 'jpeg'){ imagejpeg($new, $dst, 70); }elseif ($fileExtension == "gif"){ imagegif($new, $dst); }elseif ($fileExtension == 'png'){ imagepng($new, $dst); } } } } |
||
![]() |
![]() |
![]() |
#3 | ||
|
|||
Mycket flitig postare
|
Ta och läs http://qdig.sourceforge.net/Support/AllowedMemorySize så förstår du varför du behöver mer minne.
|
||
![]() |
![]() |
![]() |
#4 | ||
|
|||
Flitig postare
|
Tack, det var nyttig läsning.
Men jag visste att det krävde mycket minne och att det har med storleken på bilden att göra. men det verkar alltså inte vara något jag kan göra? :S |
||
![]() |
![]() |
![]() |
#5 | |||
|
||||
Mycket flitig postare
|
Antar att One heller inte tillåter att du ändrar minnet med ini_set eller htaccess heller. Annars hade ju det fungerat. Loopa tillåter att man ändrar detta i alla fall - jag helgonförklarar dem av den anledningen.
![]() |
|||
![]() |
![]() |
![]() |
#6 | |||
|
||||
Mycket flitig postare
|
En lösning för att komma runt det är ju att hitta ett annat sätt att skala om bilderna, kanske göra det i Flash på klienten vid uppladdning?
|
|||
![]() |
![]() |
![]() |
#7 | ||
|
|||
Flitig postare
|
hur skapar man en htaccess fil som ändrar det?
|
||
![]() |
![]() |
Svara |
|
|