LINUX.ORG.RU

Подскажите метод для создания «резиновых» картинок


0

0

Задача: нужно рисовать кнопки/панельки/окошки вроде таких картинок: http://static.rbytes.net/full_screenshots/c/r/crystal-button.jpg, где каждая картинка может иметь произвольный размер. Размер зависит от содержимого окна/кнопки. Скажем, надо нарисовать кнопку с длинной надписью, размером 300х50 пикселей - передаем размер в фунцию и кнопка отрисовалась.

Ресайзить нельзя - будет некрасиво, ибо размеры варьируются очень сильно.

Дык вот как мне нарезать картинку/как разметить, дабы при любом размере получить удобоваримый результат?

Копировать браузерные таблицы не хочу, да и многие моменты ими не описать. К примеру, резиновое окошко в форме облачка ими уже не сделать.

Может есть что-то по этой теме интересного? Или изобрести свой язык разметки?

SVG не предлагать.

Вот в скинах Оперы и в будущем CSS3 используется такая штука для скинования блоков: кнопка нарезается на 9 картинок (4 в углах, 4 по краям, 1 в центре), задаются параметры маштабирования/тайлинга и все готово. Вот только форму вроде кучерявого облачка в эту схему уже не запихнуть.

Сделать табличкой 3х3 нет проблем, но хочется чего-то более продвинутого. Может что-то уже изобрели?

simple_best_world_web_master
() автор топика

а чем тебе svg не нравится? имхо, вполне себе подходящая штука.

isden ★★★★★
()

Если в кнопках всегда 1 строчка текста, то можно на 3 части делить (лево, право, середина повторяется). Хотя с овальными кнопками этот номер не пройдёт.

Deleted
()

> Копировать браузерные таблицы не хочу, да и многие моменты ими не описать. К примеру, резиновое окошко в форме облачка ими уже не сделать.

Тогда тебе остается ява-скриптом узнавать размеры клеточки таблицы, передавать это серверу (может, прокатит и document.write, но сомневаюсь), а там генерить облачко нужного размера. Для некоторого уменьшения работы можно размер округлять и иметь кэш сгенеренных картинок.

З.Ы. ты запостил не в тот раздел, надо web-development

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от Deleted

> Если в кнопках всегда 1 строчка текста

А как скиновать тогда большие панельки/окошки? Размер должен быть произвольным (ведь даже шрифты могут сильно варьироваться на разных платформах)

simple_best_world_web_master
() автор топика
Ответ на: комментарий от www_linux_org_ru

> Тогда тебе остается ява-скриптом

У меня не браузер, у меня обычный канвас. Браузерные таблицы приведены для примера, как наиболее гибкий способ нарезки картинок.

> а там генерить облачко нужного размера

Нельзя, нужны минимальные затраты на отрисовку, никакого рендеринга при исполнении (потому SVG исключен). Кеширование тут тоже не подходит - пользователь может интерактивно менять шрифты/размеры, а значит заранее кеш не сделать. Делать кеш во время работы - получить тормоза.

> ты запостил не в тот раздел, надо web-development

Как раз правильно отпостил, ибо я не ограничен браузером. Мне нужна только сама нарезка/разметка, остальное реализую сам.

c:cheffed expert какбэ на что-то намикает...

anonymous
()

> SVG не предлагать.

Ну EPS тогда :) Вообще-то под описанные требования SVG подходит как нельзя лучше. И поддерживается он и в гуёвых тулкитах, и в браузерах.

const86 ★★★★★
()
Ответ на: комментарий от simple_best_world_web_master

Для такого хорошо идёт вектор, который ты не хочешь :} Теоретически, размер шрифтов в кнопках можно выставить в px, но это не очень хорошо. Тогда, видимо, делить на части. Жуткое дело.

А из более-менее нового это только тот самый CSS3, наверное. Если он где-то работает.

Deleted
()
Ответ на: комментарий от Deleted

> Для такого хорошо идёт вектор, который ты не хочешь

А вот если у тебя есть только канвас, рисование примитивов и копирование битмапов с альфаканалом - ты захочешь вектор? Я бы и сам не против, да не могу... Потому и нарезаю.

> Теоретически, размер шрифтов в кнопках можно выставить в px, но это не очень хорошо

Эх, не на всех платформах это можно сделать... И изменение размера шрифта - это фактически растеризация ___векторного___ шрифта под новый размер. Ну нельзя вектор, нельзя... Дада, у меня даже не десктоп.

> Тогда, видимо, делить на части. Жуткое дело.

А мне больше ничего и не остается. Осталось понять, как именно делить... Для того и завел тред. Если ничего нового не узнаю - буду повторять браузерные таблицы и CSS.

anonymous
()
Ответ на: комментарий от MKuznetsov

> как вариант - ImageMagick; а в общем случае любая библиотека, которая умеет рисовать :)

Осталось найти алгоритм рисования разных частей :)

Потом ImageMagick выбрасывается за ненадобностью.

Дално, даю подсказку: http://www.youtube.com/watch?v=sNCqrylNY-0 - если думаете "раз плюнуть", то почитайте спецификации его чипа, поищите формирование видеосигнала. У меня конечно не такое Ъ, но вот имажмеджик тоже негде запускать

anonymous
()
Ответ на: комментарий от anonymous

ну дык надо правильно ставить вопрос...

что-то вроде : "нужен метод/библиотека для отрисовки векторов и фонтов при сильно ограниченных ресурсах - AT32UC3A1512 (32бит ARM 66 Mgz 1,5M RAM), ОС писал сосед, остальное сам" :)

а серьёзно - присмотритесь к cairo, если аппаратных ресурсов всё-же хватит и есть время - портируйте на своё железо, сильно облегчит всякую работу с графикой, да и благодарные пользователи/последователи спасибо скажут

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

http://www.afterstep.org/afterimage/
там всё есть, чтобы делать это программно.
а, кнопки можно спионерить у StarDock WindowBlinds
(их skin files - это обычные zips),
там также можно "почерпнуть", как они перерисовывают
кнопки при resize (кнопка делится на несколько под-областей,
каждая из которых пререрисовывается по-своему)

Valeriy_Onuchin ★★
()
Ответ на: комментарий от const86

>Ну EPS тогда :) Вообще-то под описанные требования SVG подходит как нельзя лучше. И поддерживается он и в гуёвых тулкитах, и в браузерах.

И как уже можно свободно использовать SVG и не беспокоится о совместимостью с разными браузерами? Вот ЛОР до сих пор использует фон в картинках вместо png с альфа каналом для совместимости с IE. Может лучше флеш?

Lucky1 ★★★
()
Ответ на: комментарий от Lucky1

> И как уже можно свободно использовать SVG и не беспокоится о совместимостью с разными браузерами? Вот ЛОР до сих пор использует фон в картинках вместо png с альфа каналом для совместимости с IE. Может лучше флеш?

ТС вроде не про веб спросил.

А если про веб говорить, IE вообще ничего не умеет, кроме своих велосипедов. Кстати, что мешает поставить плагин для svg? Или для флеша типа можно плагин требовать, а остальное должно голым браузером поддерживаться?

const86 ★★★★★
()

Реализовать самому минимально необходимое подмножество SVG (или типа того).

k_andy ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.