Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.81/31: Рейтинг темы: голосов - 31, средняя оценка - 4.81
al-sher
1 / 1 / 0
Регистрация: 14.04.2013
Сообщений: 10
1

Склеивание 2 картинок

08.05.2013, 15:29. Просмотров 6165. Ответов 18
Метки нет (Все метки)

Здравствуйте! Подскажите пожалуйста как можно склеить два изображения, чтобы они были одно под другим, если в коде содержится <div> со стилями который добавляет стили к изображению которые тоже нужны(к примеру тень). В конце надо чтобы код стал картинкой и при вызове кода <img src=ссылка_на_код.png> открывалась обычная картинка со стилями. Надеюсь на вашу помощь
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.05.2013, 15:29
Ответы с готовыми решениями:

Как реализовать склеивание двух картинок?
Есть сервис для наложения водного знака, при нажатии кнопки скачать, через аякс на сервер...

склеивание строк
Привет всем. Сейчас пытался сделать скрипт пхп, который берет из текстового файла наугад 5 строчек...

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

Склеивание PHP+TPL в один файл
Есть папка source и папка tpl Задача сделать так, что бы одноимённые файлы php&amp;tpl в этих папках...

Создание/склеивание doc\docx файла из шаблона doc\docx с заменой ключевых слов
Подскажите, как можно такое реализовать? Я узнал, что в rtf нельзя делать разрыв страницы, а...

18
TGrey[WoLf]
41 / 41 / 4
Регистрация: 14.09.2008
Сообщений: 683
08.05.2013, 20:14 2
Вам только ТЗ составлять

Ничего не понял конечно, но чтобы работать с картинками поищите в сети "работа с GD"
0
al-sher
1 / 1 / 0
Регистрация: 14.04.2013
Сообщений: 10
08.05.2013, 21:03  [ТС] 3
Извините если написал не понятно. Сейчас попробую рассказать по понятнее.
Допустим у меня есть картинка и под нее мне надо поставить другую картинку. Это все надо сделать на php и желательно чтобы сохранились стили у картинки.
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16765 / 6652 / 869
Регистрация: 12.06.2012
Сообщений: 19,902
Завершенные тесты: 1
09.05.2013, 00:25 4
создаете отдельный php-файл, отвечающий за вывод изображения. Подключаете через тег <img> только путь указываете к php-файлу.
в php-файле нечто наподобие такой схемы:
1. Открываете первое изображение, создаете ресурс (imagecreatefrom...)
2. Открываете второе изображения, создаете еще один ресурс (аналогично)
3. Берете ширину/высоту первого и второго изображения, складываете высоту и узнаете разность ширины
4. Думаете, что делать с различными по ширине изображениями (залить фоном, "отрезать", ...)
5. Создаете новый ресурс с высчитанной шириной и высотой (imagecreatetruecolor/imagecreate)
6. Если изображения в формате png/gif - добавляете "прозрачность" - imagecolortransparent, imagealphablending и т.д.
7. С помощью imagecopyresampled() копируете сначала первое, затем второе изображение
8. Отправляете заголовок (header()), что это рисунок.
9. выводите изображение через image....()

Все функции gd - здесь http://www.php.net/manual/ru/book.image.php

Добавлено через 2 часа 25 минут
дело было вечером, делать было нечего.. Картинки разной ширины растягиваются до большей ширины..
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?php
 
ini_set('memory_limit', '500M');
 
function drawImage($img1, $img2, $file = false)
{
    if(!preg_match('~\.(jpe?g|png|gif)$~i', $img1) || !preg_match('~\.(jpe?g|png|gif)$~i', $img2))
        return false;
    if(!($info[] = getimagesize($img1)) || !($info[] = getimagesize($img2)))
        return false;
 
    $info[0]['type'] = substr($info[0]['mime'], 6);
    $info[1]['type'] = substr($info[1]['mime'], 6);
    $info[0]['width'] = (int) $info[0][0];
    $info[1]['width'] = (int) $info[1][0];
    $info[0]['height'] = (int) $info[0][1];
    $info[1]['height'] = (int) $info[1][1];
 
    $create1 = 'imagecreatefrom' . $info[0]['type'];
    $create2 = 'imagecreatefrom' . $info[1]['type'];
    if( !function_exists($create1) || !function_exists($create1) )
        return false;
 
    $width = ($info[0]['width'] > $info[1]['width']) ? $info[0]['width'] : $info[1]['width'];
    $height = $info[0]['height'] + 1 + $info[1]['height']; //зазор в 1 пиксель между картинками (можно убрать, конечно)
    if(empty($width) || empty($height))
        return false;
    
    $image1 = $create1($img1); //create images
    $image2 = $create2($img2); //create images
 
    $dst = imagecreatetruecolor($width, $height);
 
    if( in_array($info[0]['type'], array('gif','png')) || in_array($info[1]['type'], array('gif','png')) )
    {
        imagecolortransparent($dst, imagecolorallocatealpha($dst, 0, 0, 0, 127));
        imagealphablending($dst, false);
        imagesavealpha($dst, true);
        $type = 'png';
    }
    else
        $type = 'jpeg';
    
    imagecopyresampled($dst, $image1, 0, 0, 0, 0, $width, $info[0]['height'], $info[0]['width'], $info[0]['height']);
    imagecopyresampled($dst, $image2, 0, $info[0]['height'] + 1, 0, 0, $width, $info[1]['height'], $info[1]['width'], $info[1]['height']);
    
    $save = 'image' . $type;
    header('Content-type: image/' . $type);
    return false !== $file ? $save($dst, $file) : $save($dst);
    
}
 
if(false === drawImage('http://cuboro.org/uploads/images/kartinki_2.jpg', 'http://img0.liveinternet.ru/images/attach/c/0/63/104/63104649_1282593567_09.png'))
echo file_get_contents('путь_к_дефолтной_картинке.jpg');
HTML5
1
<img src="путь_к_скрипту.php">
0
al-sher
1 / 1 / 0
Регистрация: 14.04.2013
Сообщений: 10
09.05.2013, 16:46  [ТС] 5
KOPOJI, большое спасибо за код и рассказ как можно все реализовать, а что если я знаю размеры готового изображения? И еще как можно пользоваться вашим кодом? Пробовал дописать $img1 = "путь"; $img2 = "путь2"; но не помогло кстати забыл сказать что первая картинка уже создается на php(счетчик яндекса).
Пробовал сделать как вы рассказывали вышло так
PHP
1
2
3
4
5
6
$scr_image = imagecreatefrompng("http://www.yandex.ru/cycounter?".$_REQUEST['url']."");
imagecreatefromgif('google_pr' .$gpr .'.gif');
$image = imagecreate ( int "88px" , int "31px" );
bool imagecopyresampled ( resource $image , resource $src_image , int 0 , int 0 , int 0 , int 0 , int 88 , int 31 , int 88 , int 31 );
header('Content-type: image/gif');
imagegif($image);
где я мог допустить ошибку?
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16765 / 6652 / 869
Регистрация: 12.06.2012
Сообщений: 19,902
Завершенные тесты: 1
09.05.2013, 19:51 6
не надо трогать никаких $img. Просто передавать в функцию адрес картинки вместо указанных мной адресов.
Цитата Сообщение от KOPOJI Посмотреть сообщение
PHP
1
if(false === drawImage('http://cuboro.org/uploads/images/kartinki_2.jpg', 'http://img0.liveinternet.ru/images/attach/c/0/63/104/63104649_1282593567_09.png')) echo file_get_contents('путь_к_дефолтной_картинке.jpg');
Цитата Сообщение от al-sher Посмотреть сообщение
PHP
1
$image = imagecreate ( int
описание типов данных уберите. Кстати,
Цитата Сообщение от al-sher Посмотреть сообщение
"88px"
при приведении к целому типу (а именно такой аргумент должен быть передан) вы получите 0, а не 88.
0
mariklozik
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 52
20.01.2014, 14:49 7
А как склеить много картинок, например 10?
Создаеться папка со случайным именем, туда закидываються 10 картинок, и потом те 10 клеяться в одну
Функция imagecopy описывает только 2 картинки
спасибо
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16765 / 6652 / 869
Регистрация: 12.06.2012
Сообщений: 19,902
Завершенные тесты: 1
20.01.2014, 15:18 8
поочередно. Сначала две картинки.. Затем к ним еще.. Затем еще..
0
mariklozik
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 52
20.01.2014, 15:21 9
ясно, не подумал чет от тем (новенький)
а как б это автоматизировать, чоб взяло все картинки с определенной папки и склеило ?
спасибо
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16765 / 6652 / 869
Регистрация: 12.06.2012
Сообщений: 19,902
Завершенные тесты: 1
20.01.2014, 15:25 10
Автоматизировать, конечно, можно.. Вопрос в том, чтобы "правильно" склеить их. Например, какого размера должна быть каждая "вклеенная" картинка? По сколько изображений должно быть в ширину/высоту. Что делать, если размеры картинок не дают четко определить размеры (ведь тогда получится где-то "пустое" место). И, самое главное, работа с изображениями в PHP через GD/GD2 - достаточно ресурсоемкий процент, имхо, в данной ситуации лучше посмотреть в сторону других языков программирования (хотя бы тот же "прародитель" - си)
0
mariklozik
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 52
20.01.2014, 15:28 11
Можно взять размеры изображений и подщитать
там есть отступ от начала картинки(финальной) и чтоб он был равен ширине пред.+ чтототам, это техничекий вопрос такой, ИМХО.
Мне бы вывод автоматизировать , а там чтоб не было пробелов или наезжаний картинок , я думаю допилю сам ))
я делаю поочерено , но чет ничего не меняеться
Я чтот не знаю как другие языки под веб подключить
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16765 / 6652 / 869
Регистрация: 12.06.2012
Сообщений: 19,902
Завершенные тесты: 1
20.01.2014, 15:43 12
Цитата Сообщение от mariklozik Посмотреть сообщение
Мне бы вывод автоматизировать
вывод чего автоматизировать? Картинок из директории что ли?
0
mariklozik
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 52
20.01.2014, 15:57 13
ну склейку 10ти картинок
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16765 / 6652 / 869
Регистрация: 12.06.2012
Сообщений: 19,902
Завершенные тесты: 1
20.01.2014, 16:03 14
я же говорил - склеивание 10 картинок от склеивания двух мало чем отличается, кроме более детального продумывания того, каким образом вы их будете собирать в одну. А так - тот же самый алгоритм, только imagecopyresampled использовать больше (в 10 раз)
1
mariklozik
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 52
20.01.2014, 16:26 15
я то думаю в чем проблема , я исп. imagecopy )))

А как удобнее, переименовывать картинки в 1 , 2 , 3 ... 10
или брать (еще не знаю как) все файлы из папки и прописывать каждый раз путь чтот такое , можно в 2х словах пож. как выбрать из папки
спасибо
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16765 / 6652 / 869
Регистрация: 12.06.2012
Сообщений: 19,902
Завершенные тесты: 1
20.01.2014, 16:29 16
В цикле пробегайтесь по директории, имена картинок складывайте в массив. Затем пробегайтесь по массиву и создавайте изображения из этих имен. Затем их склеивайте. Полностью динамически все это реализовать будет проблематично
1
mariklozik
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 52
23.01.2014, 15:30 17
Тзвините конечно, ничего не получаеться. мой вывод
PHP
1
2
3
4
5
6
7
8
9
10
11
12
for ($i=1; $i<=2; $i++) {
 
    for ($j=1; $j<=5; $j++) {
    
        list($x, $y) = GetImageSize("images/$j.png");
        $xx+=$x;    $yy+=$y;
        $src = ImageCreateFromPNG("images/$j.png");
        $image = ImageCopy($background, $src,($xx-$x), ($i-1)*($y+50), $null , $null , 500, 500);
    
    }
    
}
выводит такое
Склеивание 2 картинок

ну а должно чтоб нижняя стора примкнулась к левой стороне и начиналось с 6ти (картинок 10
Спасибо)
0
mariklozik
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 52
23.01.2014, 20:05 18
Ребят , помогите пож..
0
mariklozik
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 52
26.01.2014, 17:50 19
извините , но АП , недоходит мо меня )
0
26.01.2014, 17:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.01.2014, 17:50

Склеивание картинок в одну
Люди... есть 4 картинки... 1.gif,2.gif,3.gif,4.gif Можно ли в ASP их склеить, чтоб при выводе в...

Склеивание
Знаю, тема заезженная, но я так и не понимаю как это реализовывать. Переписывал я такой UDP чат на...

Склеивание
Приветствую Ребята подскажите как осуществить склеивание двух файлов exe. У меня есть исходники...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru