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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Накладывание картинок 
:(
    Опции темы
Aliance
  Дата 22.8.2005, 01:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

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



Есть идея создать новую картинку из двух частей: задний фон - динамически подгружаемая картинка (скажем, x.png) - передний фон - полупрозрачная картинка, с символикой ресурса, на котором находится картика.
Что-то вроде копирайта, только не самому делать - а PHP динамически.
Главная проблема в том, что должно это слится в одно, да так, чтоб по отдельности нельзя те фотографии было сохранить на диск. При том, размеры x.png намного больше второй полупрозрачной картинки.

Реально такое сделать с помощью PHP? smile smile
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 22.8.2005, 01:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



PM ICQ   Вверх
MOP
Дата 29.8.2005, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 28.8.2005

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



предпологается,что в директорррии с этими файлами лежит файл водяного знака... mark.gif и дефолтная картинка image.jpg

Код

<?
//watermark.php
function LoadGif ($imgname) {
    $im = @imagecreatefromgif ($imgname); /* попытка открыть */
    if (!$im) { /* See if it failed */
        $im = imagecreate (150, 30); /* создание пустого изображения */
        $bgc = imagecolorallocate ($im, 255, 255, 255);
        $tc = imagecolorallocate ($im, 0, 0, 0);
        imagefilledrectangle ($im, 0, 0, 150, 30, $bgc);
        
    /* вывод errmsg */
        imagestring ($im, 1, 5, 5, "Error loading $imgname", $tc);
    }
    return $im;
}
function LoadPNG ($imgname) {
    $im = @imagecreatefrompng ($imgname); /* попытка открыть */
    if (!$im) { /* проверить, удачно ли */
        $im  = imagecreate (150, 30); /* создать пустое изображение */
        $bgc = imagecolorallocate ($im, 255, 255, 255);
        $tc  = imagecolorallocate ($im, 0, 0, 0);
        imagefilledrectangle ($im, 0, 0, 150, 30, $bgc);
        /* вывести errmsg */
        imagestring ($im, 1, 5, 5, "Error loading $imgname", $tc);
    }
    return $im;
}
function LoadJpeg ($imgname) {
    $im = @imagecreatefromjpeg ($imgname); /* попытка открыть */
    if (!$im) { /* проверить, удачно ли */
        $im  = imagecreate (150, 30); /* создать пустое изображение */
        $bgc = imagecolorallocate ($im, 255, 255, 255);
        $tc  = imagecolorallocate ($im, 0, 0, 0);
        imagefilledrectangle ($im, 0, 0, 150, 30, $bgc);
        /* вывести errmsg */
        imagestring ($im, 1, 5, 5, "Error loading $imgname", $tc);
    }
    return $im;
}

$imageURL = 'image.jpg';

if ( !empty($_GET['imurl']) )
{
    $imageURL = $_GET['imurl'];
}

$image = null;
$size = getimagesize($imageURL);
switch ( $size[2] )
{
    case 1:    $image = LoadGif($imageURL); break;
    case 2:    $image = LoadJpeg($imageURL); break;
    case 3:    $image = LoadPNG($imageURL); break;
    default: $image = LoadJpeg('image.jpg'); break;
}

$watermarkURL = 'mark.gif';

if ( !empty($_GET['wmurl']) )
{
    $watermarkURL = $_GET['wmurl'];
}

$watermark = null;
$size = getimagesize($watermarkURL);
switch ( $size[2] )
{
    case 1:    $watermark = LoadGif($watermarkURL); break;
    case 2:    $watermark = LoadJpeg($watermarkURL); break;
    case 3:    $watermark = LoadPNG($watermarkURL); break;
    default: $watermark = LoadGif('mark.gif'); break;
}

$imageWidth = imagesx($image);
$imageHeight = imagesy($image);

$watermarkWidth = imagesx($watermark);
$watermarkHeight = imagesy($watermark);

$new = imagecreatetruecolor($imageWidth, $imageHeight);

for ( $j = 0; $j < $imageHeight; $j++ )
{
    for ( $i = 0; $i < $imageWidth; $i++ )
    {
        $rgb = imagecolorsforindex($image, imagecolorat($image, $i, $j));
        
        if ( $j < $watermarkHeight && $i < $watermarkWidth )
        {
            $rgb2 = imagecolorsforindex($watermark, imagecolorat($watermark, $i, $j));
            if ( $rgb2['alpha'] != 127 )
            {
                $rgb['red'] = (INT)(($rgb['red'] + $rgb2['red']) / 2);
                $rgb['green'] = (INT)(($rgb['green'] + $rgb2['green']) / 2);
                $rgb['blue'] = (INT)(($rgb['blue'] + $rgb2['blue']) / 2);
            }
        }
        
        $ind = imagecolorexact($new, $rgb['red'], $rgb['green'], $rgb['blue']);
        if ( $ind < 1 )
        {
            $ind =  imagecolorallocate($new,  $rgb['red'], $rgb['green'], $rgb['blue']);
            if ( $ind < 1 )
            {
                $ind = imagecolorclosest($new,  $rgb['red'], $rgb['green'], $rgb['blue']);
            }
        } 
        imagesetpixel($new, $i, $j, $ind);
        
    }

}
header ("Content-type: image/jpeg");
imagejpeg($new,"", 80);

?>


Код

//index.php
<html>
<head>
<title>Watermark test</title>
</head>
<body>
<form action="" method="GET">
Image URL (*.gif, *.jpg, *.png)<input name="imurl" value="<?echo (!empty($_GET['imurl']))?$_GET['imurl']:'';?>"><br>
Watermark URL (*.gif, *.jpg, *.png)<input name="wmurl" value="<?echo (!empty($_GET['wmurl']))?$_GET['wmurl']:'';?>"><br>
<input type="submit" name="show" value="Test!"><br>
*You can leave this fields blank(one... or another... or both :)).
</form>
<image src="watermark.php?<?echo (!empty($_GET['imurl']))?'imurl='.$_GET['imurl']:''; echo (!empty($_GET['wmurl']))?'wmurl='.$_GET['wmurl']:'';?>">
</body>
</html>


писал давно... тестировать лень... но когда-то работало...

алгоритм наложения можно поменять....
PM MAIL WWW ICQ MSN   Вверх
IZ@TOP
Дата 29.8.2005, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

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




 ! 
 
MOP, следите за языком пожалуйста.



--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Графика | Следующая тема »


 




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


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

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