ъплоуд + рисайз на картинки

8 отговора 329 прегледа
#1

ъплоуд + рисайз на картинки

имам проблем (за пореден път):
имам скрипт за ъплоуд на картинки на сървър, който веднага след ъплоуда ги оразмерява. обаче явно има някакъв бъг, защото при преоразмеряването качеството на картинката се губи адски много (отвсякъде се преебават цветовете - в смисъл че май че намаляват драстично)

трябва ли да правя някакви проверки дали картинката е ъплоудната преди да започна да я манипулирам и дали от това може да е проблемът. ако те така, моля, напишете ми точно някакви идеи за проверка

Отговор
в отговор на id #2

Re: ъплоуд + рисайз на картинки

я да видим как ги оразмеряваш, най вероятно имаш някое драстично сваляне на качеството като правиш новия image

root@localhost#cd /pub
root@localhost#more beer
Отговор
в отговор на ro6avia #3

Re: функцията

if (!is_array($input)) {
$array[0] = $input;
} else {
$array = $input;
}
$return = "";

for($i = 0; $i < count($array); $i++) {
//calculate the new size of the image
$properties = GetImageSize(imgfolder."/".$array[$i]);
$orgwt = $properties[0];
$orght = $properties[1];
$ratio = $orgwt/$orght;
$ratio = round($ratio, 5);
$newht = basesize;
$newwt = round($newht*$ratio);

//if($orght == basesize) {continue; }

//create links to the original & new image
eregi("^.+\.(jpeg|jpg|png|gif)$", $array[$i], $type);
$type = strtolower($type[1]);

if($type == "jpg" OR $type == "jpeg") {
$org_im = ImageCreateFromJpeg(imgfolder."/".$array[$i]);
} elseif ($type == "gif") {
$org_im = ImageCreateFromGif(imgfolder."/".$array[$i]);
} elseif ($type == "png") {
$org_im = ImageCreateFromPng(imgfolder."/".$array[$i]);
}
$cop_im = ImageCreate($newwt, $newht);

//resize the image
$created = ImageCopyResized ( $cop_im,
$org_im,
0, 0,
0, 0,
$newwt, $newht,
$orgwt, $orght
);


//record the image
if($type == "jpg" OR $type == "jpeg") {
ImageJpeg($cop_im, imgfolder."/".$array[$i], 90);
} elseif ($type == "gif") {
ImageGif(imgfolder."/".$cop_im, $array[$i]);
} elseif ($type == "png") {
ImagePng(imgfolder."/".$cop_im, $array[$i]);
}

//destroy the images
ImageDestroy($org_im);
ImageDestroy($cop_im);

Отговор
в отговор на id #4

Re: функцията

Я пробвай с тези :
$cop_im = imageCreateTrueColor($newwt, $newht);
imageAntiAlias($cop_im ,true);
$created = imageCopyResampled($cop_im , $org_im , 0, 0, 0, 0,$newwt, $newht,$orgwt, $orght );

root@localhost#cd /pub
root@localhost#more beer
Отговор
в отговор на ro6avia #5

Re: функцията

същия шит е!
виж тази:

[линк]

Отговор
в отговор на id #6

RTFM

виж ко пише в хелпа за ресайз...май имаше един параметър, дето отговаря за качеството - сложи го на макс.....

[линк]
Отговор
в отговор на id #7

Re: функцията

последния параметър е качеството, пък ако не помага, в php.net user comments има функцийка imagecopyresizedbicybic или нещо подобно, малко бавничка е 1000 картинки ги оправя за час и нещо си, но качестовото е перфектно

-----------------------
гърбавия, ковчег ще го изправи
Отговор
в отговор на ro6avia #8

оппа

дължа ти извинение.
всъщност не бях променил фсички функции. наистина проблема е бил в това, че не създавам 'пълноцветна' нова картинка.
сега всичко е ок.
мерси

Отговор
в отговор на id #9

Re: оппа

Ще черпиш каса бира 3 пъти и готово :-)))))

Още утре не webdev ако ще идваш

root@localhost#cd /pub
root@localhost#more beer
Отговор