|
|
|
| Стоит передо мной такая задачка. Требуется у имеющейся картинки сделать скругленные углы. Размеры картинки заранее известны, так что для этих целей вполне можно заготовить маску. Маска может быть как цветная, так и с альфа каналом. Вот только не нашел я в GD способа использовать эту маску, кроме как полным перебором всех пикселей. У кого есть опыт работы с графикой на PHP - как это возможно сделать? | |
|
|
|
|
|
|
|
для: Loki
(02.04.2008 в 16:50)
| | Недавно где то читал статью как с помощью css скруглить углы. вроде на хабре. юз гугл | |
|
|
|
|
|
|
|
для: Loki
(02.04.2008 в 16:50)
| | с помошью flash можно, про css сомнительно
сделать скругленные углы у картинки | |
|
|
|
|
|
|
|
для: AlexSol
(02.04.2008 в 17:05)
| | CSS не подойдет. Скругленные углы там только с третьей версии и относятся они к блокам.
Флеш тоже не подойдет, так как элементы на странице будут накладываться друг на друга, а у флеша с этим трудности.
Да и в конце концов это возможно сделать через php, просто мне кажется что попиксельно рисовать альфа канал слишком расточительно. Вот и интересуюсь - есть ли более человеческий способ? | |
|
|
|
|
|
|
|
для: Loki
(02.04.2008 в 17:09)
| |
http://ballista.ru/scripts/swfir
|
и вот еще) | |
|
|
|
|
|
|
|
для: Loki
(02.04.2008 в 17:09)
| | да, с флешом или наложение или полупрозрачность ( | |
|
|
|
|
|
|
|
для: AlexSol
(02.04.2008 в 17:05)
| | Ничего сомнительного:
http://designformasters.info/posts/round-corners-no-image/
|
Помещаем изображение в див и с помощью кода(в ссылке сверху) округляем дви. все. | |
|
|
|
|
|
|
|
для: Antohins
(02.04.2008 в 17:10)
| | Если вы читали статью, на которую ссылаетесь, то должны понимать что вставить изображение в div с такими скруглениями невозможно. | |
|
|
|
|
|
|
|
|
для: mihdan
(02.04.2008 в 17:15)
| | Это очевидное решение, но не поддерживающее полупрозрачность. Именно поэтому я и хочу использовать альфа канал. Кроме того, тут надо следить чтобы цвет рамки отличался от цветов на основной картинке. Совпадение маловероятно, но кто знает какого цвета клиент загрузит изображение:) | |
|
|
|
|
|
|
|
для: Loki
(02.04.2008 в 16:50)
| | Ну что, господа? Неужели в разгар 21 века всем хватает однопискельной прозрачности? Или в PHP пока нет более красивого способа нежели полный перебор? | |
|
|
|
|
|
|
|
для: Loki
(04.04.2008 в 11:31)
| | Это пробовали? На мой взгляд интересный вариант! Но.. | |
|
|
|
|
|
|
|
для: mihdan
(04.04.2008 в 12:06)
| | Это флеш. Я уже написал что флеш не подходит в силу своих специфических ограничений.
Пока выложу вариант который я родил, хотя он мне и не нравится. Очень надеюсь что у кого-то есть решение лучше.
<?
header('Content-type: image/png');
$im = imagecreatefromjpeg("test.jpg");
$mask = imagecreatefrompng("alpha.png");
imagealphablending($im, false);
imagesavealpha($im, true);
for ($i=0; $i<imagesx($mask); $i++)
{
for ($j=0; $j<imagesy($mask); $j++)
{
imagesetpixel($im, $i, $j, (imagecolorat($im, $i, $j)+(imagecolorat($mask, $i, $j)>>17<<24)));
}
}
imagedestroy($mask);
imagepng($im);
imagedestroy($im);
|
| |
|
|
|
|
|
|
|
для: Loki
(04.04.2008 в 13:06)
| | А imagecopy() не пробовали? | |
|
|
|
|
|
|
|
для: Саня
(04.04.2008 в 14:19)
| | Пробовал. Не совсем то, что нужно: он умеет сохранять альфа канал для того слоя где этот канал был изначально, но не умеет применять к слою где его изначально небыло.
То есть в случае imagecopy() получается абсолютно непрозрачный фон, на который наложено полупрозрачное изображение маски.
<?
header('Content-type: image/png');
$im = imagecreatefromjpeg("test.jpg"); //непрозрачный исходник
$mask = imagecreatefrompng("alpha.png"); //полупрозрачная маска
imagecopy($im, $mask, 0, 0, 0, 0, imagesx($mask), imagesy($mask));
imagepng($im);
|
| |
|
|
|