Ищу библиотеку изображений PHP… закругленные углы и изменение размера [закрыто]
-
03-07-2019 - |
Вопрос
Просто ищу хорошую библиотеку изображений PHP, я хочу отображать изображения со скругленными углами, изменять размер и размывать некоторые другие изображения либо на лету, либо при загрузке.
Решение
Я бы посоветовал ознакомиться с ImageMagick.
В PHP тоже есть отличные оболочки для библиотеки: http://www.imagemagick.org/script/api.php#php
Другие советы
Попробуй с http://wideimage.sourceforge.net/wiki/MainPage
Это не делается "из коробки", но у вас может быть частично прозрачный PNG-файл, который вы могли бы поместить поверх исходного изображения, сделав его размытым.
это грязный взлом, который я сделал некоторое время назад для одного проекта.он применяет изображение в оттенках серого в качестве карты прозрачности к другому изображению (черное прозрачно, белое непрозрачно.поддерживается масштабирование карты в соответствии с пропорциями изображений).вы могли бы создать подходящую карту прозрачности с закругленными углами (включая сглаживание, ух ты!).
это медленно, потому что это чистый php, но я все равно всегда кэширую результаты.
$ image и $ transparencyMap являются источниками изображений gd, поэтому вы должны создать изображение из них самостоятельно.
<?php
function applyTransparencyMap($image, $transparencyMap) {
if (!function_exists('extractrgb')) {
function extractrgb($rgb) {
$a = ($rgb >> 24) & 0xFF;
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
return array($r, $g, $b, $a);
}
}
$sx = imagesx($image);
$sy = imagesy($image);
$tx = imagesx($transparencyMap);
$ty = imagesy($transparencyMap);
$dx = $tx / $sx;
$dy = $ty / $sy;
$dimg = imagecreatetransparent(imagesx($image), imagesy($image));
for ($y = 0; $y<imagesy($image); $y++) {
for ($x = 0; $x<imagesx($image); $x++) {
$intcolor = imagecolorat($image, $x, $y);
$intalpha = imagecolorat($transparencyMap, floor($x*$dx), floor($y*$dy-1));
list($tr, $tg, $tb, $ta) = extractrgb($intalpha);
$alphaval = 127-floor(($tr+$tg+$tb)/6);
list($r, $g, $b, $a) = extractrgb($intcolor);
$targetAlpha = max(0, min(127,$alphaval+$a));
$sct = imagecolorallocatealpha($image, $r, $g, $b, $targetAlpha);
imagesetpixel($dimg, $x, $y, $sct);
}
}
return $dimg;
}
?>
с другой стороны, лучше использовать широкое изображение, как предложил апикот.делает то же самое и даже больше.
Вы можете попробовать воспользоваться этой библиотекой http://freelogic.pl/thumbnailer/examples