SASGIS

Веб-картография и навигация


View Issue Details Jump to Notes ] Issue History ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0000368SAS.Планета[All Projects] Хотелкаpublic11-01-2011 04:0510-10-2012 11:49
ReporterParasite 
Assigned Tozed 
PrioritynoneSeveritytweakReproducibilityalways
StatusclosedResolutionfixed 
PlatformWindowsOSXPOS VersionSP3
Product Version101206 
Target Version120808Fixed in Version120808 
Summary0000368: Сведение в PNG с альфой
DescriptionХотелось бы возможности сведения карт, использующих PNG-тайлы с альфа-каналом - в этот же самый PNG (с сохранением альфы). Спасибо.
Tagsgif, png, альфа-канал, прозрачность, склейка, экспорт
Attached Files

- Relationships
related to 0000041closedzed Хочется иметь возможность склеивать в формат PNG 

-  Notes
(0001146)
Parasite (administrator)
10-03-2011 10:56

Он не дублирует, а дополняет.
В 0000041 упор на сам факт сведения в PNG.
В 0000368 - на сведение именно с прозрачностью, а не просто сохранение в данный формат файла как таковой.
(0001159)
gpsMax (manager)
10-03-2011 19:22

Альфой предполагается заливать те места, где нет тайлов? Или что с ней делать?
(0001165)
Parasite (administrator)
11-03-2011 03:54

Альфу предлагается просто оставлять на своем месте там, где она существует на исходных тайлах. Это касается GIF и PNG. Например, тот же гибрид гугля - гиф с прозрачностью (на сервере), при попытке его сведения текущим САСом - получаем белый фон вместо альфы. То же самое и с PNG. То есть, исходно существующий альфа-канал безвозвратно теряется и способов его восстановить из сведенного изображения - нет (кроме как опять обработать в фотошопе и ручками снова добавить прозрачность, то есть - пересоздать всю альфу ручками). Безусловная потеря САСом части информации с изображения не есть гуд, отсюда и хотелка.

И да, как фичу - можно делать "альфа-дырки" на месте отсутствующих тайлов. Было бы приятно в фотошопе просто подложить бакграунд нужного цвета под всю карту, а не иметь сикес выделяя каждый пустой квадратик ручками и заливая краской...ведь оных на карте могут быть десятки, тысячи и даже миллионы...
(0001166)
Parasite (administrator)
11-03-2011 03:55

Так как фича касается и GIF(с альфой) в той же мере что и PNG - подредактировал название хотелки.
(0001807)
Parasite (administrator)
12-04-2011 08:27

Кстати, при проработке вопроса лучше всего было бы иметь ползунок "альфовости" этой альфы, то есть менять меру прозрачности (согласно обсужденного тут: http://sasgis.org/forum/viewtopic.php?f=2&t=1&p=19807#p19801)
(0001810)
vdemidov (manager)
12-04-2011 08:51

Ну и по какой формуле? Допустим на ползунке выбрано 63 из 255, то есть сильно прозрачное. А пиксел имеет прозрачность 195, тоесть почти не прозрачно. Что выводить в результат?
(0001813)
Parasite (administrator)
12-04-2011 09:33

>Ну и по какой формуле? Что выводить в результат?
Из твоих цифирок выше:
a=195 (пиксел)
n=63 (ползунок)
R=(a/100)*n, т.е. в результат выводить 123 (63% от значения 195). То есть - пиксел будет почти точно полупрозрачный, тогда как при исходных a=195 он был "сильно прозрачным" в исходнике.

Ползунок на максимум (100%) даст нам родную картину альфы как она пришла с сервера. Такое положение предлагаю сделать дефолтным.
Ползунок же на 0% - даст нам ноль альфы, т.е.полностью непрозрачные пиксели станут даже там, где они были прозрачными изначально (но RGB у них никто не отменял). То есть, слой визуально станет картой - без шаманства с ZMP. :)

Расчет результирующего цвета идет по каноничным: http://ru.wikipedia.org/wiki/%D0%90%D0%BB%D1%8C%D1%84%D0%B0-%D0%BA%D0%B0%D0%BD%D0%B0%D0%BB , у нас лишь введется дополнительная "мера альфовости самой альфы" в процентах от user-defined ползунка.
(0001814)
Parasite (administrator)
12-04-2011 09:39

PS:

>пиксел имеет прозрачность 195, тоесть почти не прозрачно
Альфа - это обратная величина, и a=255 соответствует полной прозрачности, а a=0 - нативному цвету, декларируемому как "бакграунд" в хидере, что вкупе с разрешенной альфой дает прозрачность "баграунд-цвета".
Соответственно, пиксел с a=195 -> это "сильно прозрачный" пиксел.
(0001815)
Tolik (manager)
12-04-2011 10:00

По этой формуле получается только "затемнение" (полу)прозрачных пикселей. Нужно также "осветление" непрозрачных.
Т.е. чтобы альфу 0 можно было превратить (в пределе) в 255.
(0001816)
vdemidov (manager)
12-04-2011 10:02
edited on: 12-04-2011 10:02

Ну в САС везде используется альфа в виде однобайтового числа без знака. Так что 0 это полностью прозрачный, а 255 полностью непрозрачный.
и 195 это таки очень непрозрачный.

(0001824)
Parasite (administrator)
12-04-2011 14:56

>Т.е. чтобы альфу 0 можно было превратить (в пределе) в 255
Каким образом, если начальных данных об альфе по данному пикселу НЕТ? Того самого значения 'a' из примера выше. Будем всегда умножать ползунок, каким бы большим он ни был - на ноль? Результат немного предсказуем. :)

Это раз. А два - что будем делать с клиппингами? Любое положительное значение альфы, помноженное на растущий положительный ползунок, рано или поздно упрется в предел 1 байта (=255). А так как вся картинка у нас не однородная, а содержит какие-то плавные переходы по альфе - то практически сразу получаем ситуацию, когда более альфовые пиксели уже уперлись в 255, а более соседние можно бы и еще подвигать...То есть, придется либо "пересвечивать" (обрезать по 255) бОльшие пиксели и плевать на них с потерей их реальных значений, либо забыть про ползунок как только хоть один пиксель упрется в 255 чтобы не искажать всю картину (а там такие пиксели могут быть изначально с сервера, например полностью прозрачный участок).

>и 195 это таки очень непрозрачный.
Windows/Delphi feature? :(
------------
$tiletemp=Image::Magick->new(size=>255x255, magick=>'png', colorspace=>'RGBA');
    $tiletemp->Read("xc:red");
    $tiletemp->Set(alpha => 'transparent:255');
    $tiletemp->Set('transparent-color' => 'red');
    $tiletemp->Mogrify('transparent-color' => 'red');
$tiletemp->Write('test.png');
------------
На выхлопе - "стеклянный" (прозрачный) тайл (#FF0000FF в к.пикселе).
При "transparent:0" - красный непрозрачный тайл (#FF000000)

PS: а мы значение альфы со значением a-маски не путаем? ;) В a-маске как раз обратное положение дел, #00 в маске = прозрачность в изображении (и соответственно #FF альфы, сохраняемый в файл).

В любом случае, это некритично. Если в винде наоборот - ну и иметь это ввиду при расчетах, да и все. Имхо.
(0001844)
Tolik (manager)
13-04-2011 09:34

Умножать на ноль я как бы не предлагал.
Если движок работает только на упрозрачнивание (0 - без изменений, 255 - полная прозрачность), то формула будет:
R = a + n*(255 - a)/255
Это если линейно, а можно и что-то вроде гамма-коррекции замутить.
(0001845)
Parasite (administrator)
13-04-2011 10:27

>Умножать на ноль я как бы не предлагал.
Однако вышеописанная ситуация - не исключена, не так ли?
А клиппинги будут всегда, как только мы попробуем увеличивать уже оптимизированные (изначально лежащие на промежутке 0...255 при максимуме в 255) значения.

>можно и что-то вроде гамма-коррекции замутить.
Угу. Осталось найти того, кто это "что-то" будет мутить. :)
(0004615)
vdemidov (manager)
23-12-2011 15:07

А разве есть экспорт в GIF? Если нету, то нужно переименовать хотелку.
(0004616)
zed (manager)
23-12-2011 15:08

Изменил.
(0005185)
Parasite (administrator)
23-01-2012 09:18
edited on: 23-01-2012 09:19

>А разве есть экспорт в GIF? Если нету, то нужно переименовать хотелку.
Смысл хотелки и заключался в том, чтобы этот экспорт _сделать_. С прозрачностью. из числа тех ГИФ-тайлов (ГИФ, внимание), которые приходят в программу.

>Изменил.
Ай малацца! А теперь меняй обратно, ибо 50% описания хотелки - это еще не вся описанная хотелка. :)

(0005186)
zed (manager)
23-01-2012 09:20
edited on: 23-01-2012 09:35

А нефиг распыляться в описании. Одна хотелка - одно пожелание. PNG и GIF это 2 хотелки. Хочешь ещё отдельно GIF - заводи новую. Тем более, что в истории правок тикета видно, что изначально хотелка была про PNG, а GIF был добавлен позже, как "однотипный".

(0005188)
Parasite (administrator)
23-01-2012 09:58

>PNG и GIF это 2 хотелки.
Хотелка ОДНА - прекращение потерь альфа-канала там, где оно нужно.
А я не виноват, что альфа у нас в сас приходит И с гифом, И с пнг. Будет приходить с чем-то третьим - я его тоже сюда допишу, ибо смысл хотелки останется всё в том же: возможность сохранять альфу в тот формат, _в каком оно и пришло_ (или в соседний, коль скоро их два).

PS: Не вижу никакой особой технической сложности сохранять в ГИФ\ПНГ на выходе, коль скоро программой они токи давно и успешно принимаются на входе (то есть, как минимум декодер в проге есть, осталось включить и кодер в эти форматы). Подозреваю даже, что это делается даже той же либой что и другие общераспространенные и открытые форматы.
(0005191)
Tolik (manager)
23-01-2012 10:04

Parasite, зачем спорить, легче открыть новую хотелку. С png ведь уже работает, стало быть и хотелка д.б. resolved, а с гифом неизвестно когда будет.

Для экспорта в png была присобачена libpng15.dll
Для гифа она, очевидно, не подходит, надо отыскать (или написать) другую.
(0005192)
zed (manager)
23-01-2012 10:04

Нет, сохранение в GIF нужно прикручивать отдельно. Одно дело открыть/сохранить гифку 256*256 pix, а другое дело нормально сохранить снимок в большом разрешении (out of memory с jpeg'ом ещё помним?).

Так что, не важно, с какими форматами САС умеет работать в режиме просмотра карт, склейка это совсем другая кухня и на каждый формат нужна своя хотелка. Дописывание в уже отработанную хотелку новых пожеланий лишено смысла.
(0005198)
Parasite (administrator)
23-01-2012 10:37

>легче открыть новую хотелку
Кому легче?
Лично мне легче было год назад написать костыль и сделать ту конкретную работу тогда, а не после даты назначения хотелки (назначенной на ..хх, а потом и на ..хххх).

Хотелка тут осталась для тех, кому понадобится тот же функционал ровно в зоне моей же задачи (и посему редактирование\кастрацию оной я и не приветствую).
У кого другие пожелания\другие понимания оной - ать-два в "Создать новый инцидент", а мне-то зачем? Что хотел - я описал выше на момент того запроса, а сейчас оно давно неактуально. Если сделают - будет решпект, нет - так нет, можно вообще закрыть. :)

>нормально сохранить снимок в большом разрешении (out of memory с jpeg'ом ещё помним?)
Ну ГИФ намного "легче" жпега (и даже ПНГ, если ничего не путаю). "Снимок в большом разрешении" и так создается САСом для сохранения в любой формат (перед кодированием собственно в файл). Задача, имхо, брать линию с того "большого разрешения"\переводить в индексн.цвета\писать в файл, повторить пока линии не кончатся. Чтобы на одной линии вылез "out of memory" - это еще надо очень постараться.... Это если безо всяких либ. Имхо, повторюсь - кодингу САСа я не советчик, но если бы делал я - я бы делал именно так. :)
(0005199)
zed (manager)
23-01-2012 10:58

>"Снимок в большом разрешении" и так создается САСом для сохранения в любой формат
Неа, САСом создаётся только битмапка 256*TargetWidth.

>Это если безо всяких либ.
Без всяких либ, при сохранении что в jpeg, что в png, что в gif будет out of memory. Либы умеют клеить снимки без дикого использования памяти, а вот внутренний компонент - нет, он создаёт (пытается) в памяти целиком битмапку, а потом только её кодирует.
(0005202)
Parasite (administrator)
23-01-2012 12:10

>САСом создаётся только битмапка 256*TargetWidth.
Вот в его пределах и плясать 256 раз, получая однопиксельные полоски и топча их в индекс и затем в out. Не?
(0005204)
zed (manager)
23-01-2012 14:30

Да.

- Users who viewed this issue
User List Anonymous (3438x), Tolik (1x)
Total Views 3439
Last View 21-11-2024 09:56

- Issue History
Date Modified Username Field Change
11-01-2011 04:05 Parasite New Issue
12-01-2011 18:13 vdemidov Status new => acknowledged
12-01-2011 18:13 vdemidov Product Version => 101206
12-01-2011 18:13 vdemidov Target Version => 29xxxx
10-03-2011 09:41 vdemidov Relationship added duplicate of 0000041
10-03-2011 09:41 vdemidov Target Version 29xxxx => 40xxxx
10-03-2011 10:56 Parasite Note Added: 0001146
10-03-2011 19:21 gpsMax Tag Attached: png
10-03-2011 19:21 gpsMax Tag Attached: склейка
10-03-2011 19:21 gpsMax Tag Attached: экспорт
10-03-2011 19:22 gpsMax Note Added: 0001159
11-03-2011 03:54 Parasite Note Added: 0001165
11-03-2011 03:55 Parasite Note Added: 0001166
11-03-2011 03:56 Parasite Summary Сведение в PNG (с альфой) => Сведение в GIF\PNG с альфой
11-03-2011 03:56 Parasite Description Updated View Revisions
11-03-2011 03:57 Parasite Relationship replaced related to 0000041
11-03-2011 03:57 Parasite Tag Attached: gif
11-04-2011 07:11 vdemidov Status acknowledged => confirmed
11-04-2011 08:34 gpsMax Tag Attached: прозрачность
11-04-2011 08:35 gpsMax Tag Attached: альфа-канал
12-04-2011 08:27 Parasite Note Added: 0001807
12-04-2011 08:51 vdemidov Note Added: 0001810
12-04-2011 09:33 Parasite Note Added: 0001813
12-04-2011 09:39 Parasite Note Added: 0001814
12-04-2011 10:00 Tolik Note Added: 0001815
12-04-2011 10:02 vdemidov Note Added: 0001816
12-04-2011 10:02 vdemidov Note Edited: 0001816 View Revisions
12-04-2011 14:56 Parasite Note Added: 0001824
13-04-2011 09:34 Tolik Note Added: 0001844
13-04-2011 10:27 Parasite Note Added: 0001845
06-06-2011 21:52 gpsMax Priority normal => none
22-12-2011 20:54 zed Status confirmed => resolved
22-12-2011 20:54 zed Fixed in Version => 24xxxx
22-12-2011 20:54 zed Resolution open => fixed
22-12-2011 20:54 zed Assigned To => zed
22-12-2011 20:55 zed Target Version 40xxxx => 24xxxx
23-12-2011 15:07 vdemidov Note Added: 0004615
23-12-2011 15:08 zed Summary Сведение в GIF\PNG с альфой => Сведение в PNG с альфой
23-12-2011 15:08 zed Note Added: 0004616
23-01-2012 08:26 vdemidov Fixed in Version 24xxxx => 120808
23-01-2012 08:26 vdemidov Target Version 24xxxx => 120808
23-01-2012 08:26 vdemidov Description Updated View Revisions
23-01-2012 09:18 Parasite Note Added: 0005185
23-01-2012 09:19 Parasite Note Edited: 0005185 View Revisions
23-01-2012 09:20 zed Note Added: 0005186
23-01-2012 09:35 zed Note Edited: 0005186 View Revisions
23-01-2012 09:58 Parasite Note Added: 0005188
23-01-2012 10:04 Tolik Note Added: 0005191
23-01-2012 10:04 zed Note Added: 0005192
23-01-2012 10:37 Parasite Note Added: 0005198
23-01-2012 10:58 zed Note Added: 0005199
23-01-2012 12:10 Parasite Note Added: 0005202
23-01-2012 14:30 zed Note Added: 0005204
10-10-2012 11:49 Tolik Status resolved => closed



Copyright © 2007 - 2024 SAS.Planet Team