Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вырезание круглой картинки и наложение на другую, Возможно средствами gd? 
V
    Опции темы
Secandr
Дата 19.4.2006, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

Репутация: нет
Всего: 39



Наша контора заказала дизайн у мега крутого дизайнера... Так он придумал динамически меняющмеся круглые картинки на сложном фоне. Причём эти картинки должны браться из других, квадратных.

Руками резать десятки, а то и сотни картинок влом...

Вот и решил узнать, возможно ли из центра одной картинки вырезать круг диаметром N пикселей и наложить на другую картинку.

Или взять на картинку наложить другую с прозрачным кругом в центре.

Насколько это сложно, есть ли смысл мучатся? Есть вариант заставить переделать дизайн smile 


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
Secandr
Дата 20.4.2006, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

Репутация: нет
Всего: 39



Код

convert 1.jpg -resize 128x128\! 128x128.gif
composite -gravity center  mask2.GIF 128x128.jpg out.jpg

1.jpg - исходная картинка
mask2.gif - картинка с прозрачностью
out.jpg - выходит картинка наложеная 


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
MuToGeN
Дата 22.4.2006, 05:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 4379
Регистрация: 15.8.2002
Где: Москва

Репутация: 2
Всего: 32



C гифом - неинтересно, ибо полноценного альфа-канала нет.
Наложение с антиалиасингом (требует GD2):
Код

<?php
function mixColors($color1, $color2, $q, $returnArray = true) {
    $r1 = ($color1 >> 16) & 0xFF;
    $g1 = ($color1 >> 8) & 0xFF;
    $b1 = $color1 & 0xFF;
    $r2 = ($color2 >> 16) & 0xFF;
    $g2 = ($color2 >> 8) & 0xFF;
    $b2 = $color2 & 0xFF;
    $r = round($r1*$q + $r2*(1 - $q));
    $g = round($g1*$q + $g2*(1 - $q));
    $b = round($b1*$q + $b2*(1 - $q));
    if($returnArray)    return array($r, $g, $b);
    else                return ($r << 16) | ($g << 8) | $b;
}

function circleImage($srcIm, $dstIm, $centerX, $centerY, $radius, $blurBorderWidth = 1) {
    $rezultIm = imagecreatetruecolor(imagesx($dstIm), imagesy($dstIm));
    imagecopy($rezultIm, $dstIm, 0, 0, 0, 0, imagesx($dstIm), imagesy($dstIm));
    for($x = $centerX - $radius; $x <= $centerX + $radius; $x++)
        for($y = $centerY - $radius; $y <= $centerY + $radius; $y++) {
            $dist = sqrt(pow($x - $centerX, 2) + pow($y - $centerY, 2));
            if($dist > $radius)                            $q = 1;
            elseif($dist < $radius - $blurBorderWidth)    $q = 0;
            else                                        $q = 1 - ($radius - $dist)/$blurBorderWidth;
            $cArr = mixColors(imagecolorat($dstIm, $x, $y), imagecolorat($srcIm, $x, $y), $q);
            $color = imagecolorexact($rezultIm, $cArr[0], $cArr[1], $cArr[2]);
            if($color == -1) $color = imagecolorallocate($rezultIm, $cArr[0], $cArr[1], $cArr[2]);
            imagesetpixel($rezultIm, $x, $y, $color);
        }
    return $rezultIm;
}

header('Content-type: image/png');
$src = imagecreatefromjpeg('1.jpg');
$dst = imagecreatefromjpeg('2.jpg');
$im = circleImage($src, $dst, 200, 200, 100);
imagepng($im);
?>
 


--------------------
Three pings for the token rings,
Five pings for the UNIX machines,
Hundred pings for the broken links,
One special ping to check them all
Through Simple Network Management Protocol!
PM MAIL ICQ   Вверх
Secandr
Дата 22.4.2006, 06:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

Репутация: нет
Всего: 39



MuToGeN, а зачем мне альфаканал? там просто прозрачно/не прозрачно ... 


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
MuToGeN
Дата 22.4.2006, 06:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 4379
Регистрация: 15.8.2002
Где: Москва

Репутация: 2
Всего: 32



С гифом края накладываемого изображения получатся неровные. 


--------------------
Three pings for the token rings,
Five pings for the UNIX machines,
Hundred pings for the broken links,
One special ping to check them all
Through Simple Network Management Protocol!
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Графика | Следующая тема »


 




[ Время генерации скрипта: 0.0450 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.