Дополнительная функция обработки изображений
Нашёл функцию в старой «Галлереи» которая отлично обрабатывает уменьшаемые размеры изображений, но вот столкнулся с проблемой плохого качества уменьшаемых изображений.
Подскажите кто хорошо с этим знаком, как в эту функцию добавить нужное качество изображений или просто сделать его самым высоким..?
Стандартный обработчик всем хорош но вот размеры по максимальным виличинам он очень плохо конвертирует я эту проблему уже описывал в топике Корректное уменьшение изображений до нужных размеров, без квадрат'тирования, но там так с ней не кто до конца не помог.
Изображение исходник:
Вот такое качество изображений получается при использовании функции:
Можете увидеть что там расплывается фон и качество очень страдает.
Представляю саму function обработчика:
Подскажите кто хорошо с этим знаком, как в эту функцию добавить нужное качество изображений или просто сделать его самым высоким..?
Стандартный обработчик всем хорош но вот размеры по максимальным виличинам он очень плохо конвертирует я эту проблему уже описывал в топике Корректное уменьшение изображений до нужных размеров, без квадрат'тирования, но там так с ней не кто до конца не помог.
Изображение исходник:
Вот такое качество изображений получается при использовании функции:
Можете увидеть что там расплывается фон и качество очень страдает.
Представляю саму function обработчика:
function func_img_resize_ovimovies($sFileSrc,$sDirDest,$sFileDest,$iWidthMax,$iHeightMax,$iWidthDest=null,$iHeightDest=null,$bForcedMinSize=true) {
if (!($aSize=getimagesize($sFileSrc))) {
return false;
}
$img_src=false;
switch ($aSize['mime']) {
case 'image/png':
$img_src=imagecreatefrompng($sFileSrc);
$sFileDest.='.png';
break;
case 'image/gif':
$img_src=imagecreatefromgif($sFileSrc);
$sFileDest.='.gif';
break;
case 'image/jpeg':
$img_src=imagecreatefromjpeg($sFileSrc);
$sFileDest.='.jpg';
break;
default:
return false;
break;
}
if (!$img_src) {
return false;
}
$srcWidth = $aSize[0];
$srcHeight = $aSize[1];
if (($srcWidth/$srcHeight) < 1)
{
$ratio=$iWidthMax/$srcWidth;
}
else
{
$ratio=$iHeightMax/$srcHeight;
}
if ($ratio>1)
{
$ratio = 1;
}
if (($srcWidth * $ratio)>$iWidthMax)
{
$ratio = $iWidthMax/$srcWidth;
}
if (($srcHeight * $ratio)>$iHeightMax)
{
$ratio = $iHeightMax/$srcHeight;
}
$iWidthDest = $srcWidth * $ratio;
$iHeightDest = $srcHeight * $ratio;
if ($iWidthDest) {
if (!$bForcedMinSize and ($iWidthDest>$aSize[0])) {
$iWidthDest=$aSize[0];
}
$iWidthNew=$iWidthDest;
if ($iHeightDest) {
$iHeightNew=$iHeightDest;
} else {
$iSizeRelation=$iWidthDest/$aSize[0];
$iHeightNew=round($iSizeRelation*$aSize[1]);
}
} else {
$iWidthNew=$aSize[0];
$iHeightNew=$aSize[1];
}
$sFileFullPath = Config::Get('path.root.server').'/'.$sDirDest.'/'.$sFileDest;
@func_mkdir(Config::Get('path.root.server'), $sDirDest);
if ($iWidthDest and $iWidthDest!=$aSize[0]) {
$img_dest=imagecreatetruecolor($iWidthNew,$iHeightNew);
imagesavealpha($img_dest,true);
imagealphablending($img_dest,false);
if (imagecopyresampled($img_dest,$img_src,0,0,0,0,$iWidthNew,$iHeightNew,$aSize[0],$aSize[1])) {
imagedestroy($img_src);
switch ($aSize['mime']) {
case 'image/png':
if (imagepng($img_dest,$sFileFullPath)) {
chmod($sFileFullPath,0666);
return $sFileDest;
}
break;
case 'image/gif':
if (imagegif($img_dest,$sFileFullPath)) {
chmod($sFileFullPath,0666);
return $sFileDest;
}
break;
case 'image/jpeg':
if (imagejpeg($img_dest,$sFileFullPath)) {
chmod($sFileFullPath,0666);
return $sFileDest;
}
break;
}
}
} else {
if (copy($sFileSrc,$sFileFullPath)) {
return $sFileDest;
}
}
return false;
}
10 комментариев
Синтаксис функции вот
И думаю лучше даже будет этих 2 обработчика совмещать (стандартный и представленный), так как в некоторых случаях более подходит стандартный…