X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

2 страниц V   1 2 >
Открыть тему
Тема закрыта
> Перевод текста в изображение
locky-yotu
locky-yotu
Topic Starter сообщение 29.7.2010, 11:02; Ответить: locky-yotu
Сообщение #1


Привет)
Возникла задача реализовать генерацию изображений из текста. Т.е. имеем html-файл, содержащий отформатированный текст. Нужно из выбранного div'а или td сгенерить картинку.
Куда копать, подскажете? В сторону GDLib? И насколько глубоко?
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
SOKOJI
SOKOJI
сообщение 29.7.2010, 11:53; Ответить: SOKOJI
Сообщение #2


(locky-yotun @ 29.7.2010, 14:02) *
Привет)
Возникла задача реализовать генерацию изображений из текста. Т.е. имеем html-файл, содержащий отформатированный текст. Нужно из выбранного div'а или td сгенерить картинку.
Куда копать, подскажете? В сторону GDLib? И насколько глубоко?


Да, думаю GDLib + ajax'ом выковыривать и отправлять текст.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
locky-yotu
locky-yotu
Topic Starter сообщение 29.7.2010, 11:59; Ответить: locky-yotu
Сообщение #3


Ну, ajax - это уже скорее приятные плюшки) А вообще GBLib да, удовлетворяет потребностям, как я уже понял.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
SOKOJI
SOKOJI
сообщение 29.7.2010, 12:01; Ответить: SOKOJI
Сообщение #4


(locky-yotun @ 29.7.2010, 14:59) *
Ну, ajax - это уже скорее приятные плюшки) А вообще GBLib да, удовлетворяет потребностям, как я уже понял.


Просто ajax+jqeury будет удобно ширину и высоту блока получить, чтобы под него уже изображение подгонять. Чтобы не получилось так, что текст не поместился на изображении.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZhukV
ZhukV
сообщение 29.7.2010, 12:12; Ответить: ZhukV
Сообщение #5


Один словом те нужно сделать скриншот документа?

Тогда действительно, парсер документа + GDLib

Наверное копать глубоко прийдется....
1. Рисовать бардюры
2. Вставлять изображения (будут приколы с PNG а оссобенно с truecolor, alpha)
3. Создавать изображения из уже созданых.
4. Рисовать закругленные грани (весьма интересно)
5. И другое, что может встречатся в документа :)

Полной идентичности не добешся НИКОГДА
Поскольку на современных сайтах много чего делается через DHTML, DCSS при помощи JavaScript (разве что сделаеш логику понимания JS кода на PHP)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
locky-yotu
locky-yotu
Topic Starter сообщение 2.8.2010, 15:23; Ответить: locky-yotu
Сообщение #6


Снова затупил... Написал небольшой скрипт, который создает изображение заданной ширины, и выводит на него текст с переносом строк. Чтобы слова переносились без разрывов, прогоняю текст через цикл. И вот в этом цикле происходит, видимо, переполнение памяти. Цикл в коде начинается с 15 строки, часть кода я пояснил.
[php]<?php
define('WIDTH', 650);
define('FONT_NAME', 'arial.ttf');
define('FONT_SIZE', 11);

$text = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum pulvinar venenatis mi, id cursus odio hendrerit ac. Cras sodales feugiat aliquam. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta purus sit amet nisl aliquam nec molestie dolor dignissim. Vestibulum risus est, fermentum vel ultrices ac, porta at nunc. Etiam eget est vel arcu porttitor imperdiet non at dui. Cras sem eros, scelerisque id tincidunt sed, ullamcorper vitae mi. In eu sapien dolor, eget vehicula eros. Nunc a fringilla lectus. Integer convallis risus id augue faucibus gravida.';

$w = (strlen($text)*FONT_SIZE)/1.8;
$h = 0;
$h = FONT_SIZE*(ceil($w/WIDTH))*2;
$part = ceil(WIDTH/(FONT_SIZE*0.64)); // Количество символов, умещающееся в WIDTH
// при данном FONT_SIZE
$ar[] = Array();
$n = 0; $tmp = 0;
while (strlen($text)>0) {
$guaranteed = substr($text,0,$part); // Подстрока, умещающаяся в WIDTH
$pos = strrpos($guaranteed,' '); //Последнее вхождение пробела в подстроку
if (substr($text,$part,1)!=' ') { // Если после подстроки идет не пробел...
$tmp = substr($guaranteed,0,$pos); // В $tmp заносится часть подстроки
// до последнего пробела
$ar[$n] = $tmp; // $tmp заносится в массив
$text = substr($text,strlen($tmp)); // Начальная строка заменяется новой,
// в которой уже нет $tmp
}
else {
$ar[$n] = $guaranteed; // Если после подстроки все же идет пробел...
$text = substr($text,$part); // Подстрока вносится в массив без изменений
}
$n++;
}

$image = imagecreatetruecolor(WIDTH,$h)
or die('Cannot create image');
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);

$m = 15;
foreach ($ar as $el) {
imagettftext(
$image,
FONT_SIZE,
0,
3, $m,
0x000000,
FONT_NAME,
$el
);
$m+=22;
}

header('Content-type: image/gif');
imagecolortransparent ($image, $white);
imagegif($image);
imagedestroy($image);
?>[/php]Скажите, что я тут делаю не так? Вот, на всякий случай приаттачу архив с исходниками.

P.S. Причем, если я меняю в 19 строке
[php]$tmp = substr($guaranteed,0,$pos); // В $tmp заносится часть подстроки[/php]на, скажем
[php]$tmp = substr($guaranteed,0,93); // В $tmp заносится часть подстроки[/php], то есть явно задаю, после какого символа делать перенос, то все работает нормально.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZhukV
ZhukV
сообщение 2.8.2010, 15:35; Ответить: ZhukV
Сообщение #7


Насколько я вижу, ты еще й обрезаеш симолы....
Для того, чтоб поставить картинку на макс ширину 650
Не нужно.
1. Пишеш текст
2. В GD должна быть функция, которая определяет, ширину и высоту шрифта и строчки. Воспользуйся нею. Создай новое изображение. Установи текст. Обреж изображение так, как те нужно!!!

Знай, imagettftext рабает только с UTF!!!
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
locky-yotu
locky-yotu
Topic Starter сообщение 2.8.2010, 15:47; Ответить: locky-yotu
Сообщение #8


Что imagettftext работает только с UTF я знаю, но мне и надо работать с латиницей, так что не проблема.
А вот по существу вопроса все равно ничего не прояснилось.
Создай новое изображение

ну так создал же)
Установи текст

установил уже
Обреж изображение так, как те нужно

Что значит "обрезать изображение"? Вместе с текстом обрезать? Или есть все же специальная функция, которая вписывает текст в прямоугольник, как это делают браузеры, вписывая текст в div?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZhukV
ZhukV
сообщение 2.8.2010, 15:53; Ответить: ZhukV
Сообщение #9


(locky-yotun @ 2.8.2010, 18:47) *
Что значит "обрезать изображение"?

Изменить размер до того, который те нужен.
Сеячас, что-то подумаем :)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
locky-yotu
locky-yotu
Topic Starter сообщение 2.8.2010, 16:37; Ответить: locky-yotu
Сообщение #10


Вот получилось похоже)
[php]<?php
define('WIDTH', 650);
define('FONT_NAME', 'arial.ttf');
define('FONT_SIZE', 11);

$text = 'Etiam a risus et nunc ultricies consectetur vitae sit amet odio. Nam ultrices nunc non leo tristique commodo. Etiam fermentum pharetra magna, eu facilisis leo semper in. Quisque eleifend pellentesque mauris aliquam lacinia. Aliquam augue libero, tempor in consectetur vitae, porta id nisl. Donec dapibus lacinia risus ut vehicula. Nullam vitae sapien id massa tincidunt feugiat. Aliquam volutpat porta elit, suscipit pulvinar libero sollicitudin in. Sed quis augue quam. Duis quis enim magna. Aenean ac augue purus, at laoreet ante. Sed bibendum fermentum libero, in convallis augue viverra vel. Curabitur imperdiet enim quis tellus mollis adipiscing.';

$w = (strlen($text)*FONT_SIZE)/1.8;
$h = FONT_SIZE*(ceil($w/WIDTH))*2.3;
$part = ceil(WIDTH/(FONT_SIZE*0.64));
$ar[] = Array();
$n = 0; $tmp = 0;
while (strlen($text)>0) {
$guaranteed = substr($text,0,$part);
$pos = strrpos($guaranteed,' ');
if (substr($text,$part,1)!=' ') {
$tmp = (substr($guaranteed,0,$pos))?(substr($guaranteed,0,$pos)):0;
$ar[$n] = $tmp;
$text = substr($text,strlen($tmp));
}
else {
$ar[$n] = $guaranteed;
$text = substr($text,$part);
}
$n++;
}

$image = imagecreatetruecolor(WIDTH,$h)
or die('Cannot create image');
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);

$m = 15;
foreach ($ar as $el) {
imagettftext(
$image,
FONT_SIZE,
0,
3, $m,
0x000000,
FONT_NAME,
$el
);
$m+=22;
}

header('Content-type: image/gif');
imagecolortransparent ($image, $white);
imagegif($image);
imagedestroy($image);
?>[/php]Товарищи PHP'шники, выскажите пожалуйста свои замечания. Можно матом.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Перевод текста в речь нейросетями - сервис Zvukogram
13 Zvukogram 7138 19.2.2024, 18:16
автор: freon_mr777
Открытая тема (нет новых ответов) 📌 Рандомизация видео/аудио/фото/текста с минимальным участием - 𝓓𝓮𝓵𝓽𝓪𝓣𝓸𝓸𝓵𝓼
Мы предлагаем комплексное решение для рандомизации всех видов офера
2 leviathan 1340 29.1.2024, 21:29
автор: leviathan
Открытая тема (нет новых ответов) Нужен перевод текста с RU на UZ
0 REGNET 743 22.2.2023, 15:17
автор: REGNET
Открытая тема (нет новых ответов) Перевод/оплата денег из за бугра
11 alexnews 2934 17.12.2022, 0:01
автор: jabbercash
Открытая тема (нет новых ответов) Наполнение сайта Автотематики (написание текста с размещением)
Ищу человека для длительного сотрудничества
2 NYLesha 1808 1.8.2022, 23:22
автор: NYLesha


 



RSS Текстовая версия Сейчас: 29.3.2024, 13:43
Дизайн