<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Codeline &#187; png</title>
	<atom:link href="http://codeline.richmd.ru/tag/png/feed/" rel="self" type="application/rss+xml" />
	<link>http://codeline.richmd.ru</link>
	<description>Веб созидание</description>
	<lastBuildDate>Thu, 22 Apr 2010 09:01:21 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Генерация PNG с Alpha-каналом в TYPO3</title>
		<link></link>
		<comments>http://codeline.richmd.ru/2008/09/%d0%b3%d0%b5%d0%bd%d0%b5%d1%80%d0%b0%d1%86%d0%b8%d1%8f-png-%d1%81-alpha-%d0%ba%d0%b0%d0%bd%d0%b0%d0%bb%d0%be%d0%bc-%d0%b2-typo3/#comments</comments>
		<pubDate>Thu, 25 Sep 2008 08:40:41 +0000</pubDate>
		<dc:creator>Павел Антонов</dc:creator>
				<category><![CDATA[TYPO3]]></category>
		<category><![CDATA[hint]]></category>
		<category><![CDATA[png]]></category>

		<guid isPermaLink="false">http://codeline.richmd.ru/?p=47</guid>
		<description><![CDATA[Одно из самых замечательных возможностей PNG-изображений конечно же Alpha-канал. Несмотря на то, что ImageMagick поддерживает PNG со всеми возможными функциями, TYPO3 при сохранении изображений не позволяет задать маску alpha-канала. При наложении изображений, комбинировании и т.д. PNG alpha-канал работает без проблем (при соответствующей настройке), но вот заставить результирующий файл содержать alpha-канал не так просто.

Хотя TYPO3 и [...]]]></description>
			<content:encoded><![CDATA[<p>Одно из самых замечательных возможностей PNG-изображений конечно же <a href="http://en.wikipedia.org/wiki/Alpha-channel">Alpha-канал</a>. Несмотря на то, что ImageMagick поддерживает PNG со всеми возможными функциями, TYPO3 при сохранении изображений не позволяет задать маску alpha-канала. При наложении изображений, комбинировании и т.д. PNG alpha-канал работает без проблем (<a href="http://codeline.richmd.ru/?p=11">при соответствующей настройке</a>), но вот заставить результирующий файл содержать alpha-канал не так просто.<br />
<span id="more-47"></span><br />
Хотя TYPO3 и не дает напрямую задать alpha-канал для генерируемого изображения, есть возможность передавать параметры в <a href="http://en.wikipedia.org/wiki/Imagemagick">ImageMagick</a>, используемый TYPO3 для генерации графики в системе (на ряду с GD). Задав нужные параметры и можно достичь необходимого результата.</p>
<p>Для генерации PNG мы будем использовать параметры ImageMagick: <strong>-background white -channel A -combine</strong>. Данная комбинация параметров означает слудующее:</p>
<ol>
<li>Создать изображение с белым фоном</li>
<li>Назначит для последующих операций работу с альфа-каналом</li>
<li>Комбинировать созданное изображение с исходным изображением. С учетом ограничения работы только над альфа-каналом &#8211; исходное изображение копируется в альфа-канал созданного изображения</li>
</ol>
<p>Прежде всего необходимо подготовить маску для alpha-канала. Маска должна быть черно белая. Черный цвет обозначает 100% прозрачность итогового изображения. Серый цвет &#8211; частичную<br />
прозрачность:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
</pre></td><td class="code"><pre class="txt" style="font-family:monospace;">  10 =  = IMG_RESOURCE
  10 {              
    file = GIFBUILDER
    file {
      XY = [20.w]+5,[20.h]+5
      format = png
      quality = 100
      backColor = #ffffff
&nbsp;
      20 = TEXT
      20 {
        text.field = title
        text.case = upper
        fontSize = 11
        fontColor = #000000
        fontFile = fileadmin/fonts/tahomabd.ttf
        offset = 1,9            
        niceText = 1
        niceText.scaleFactor = 5
      }
    }
  }</pre></td></tr></table></div>

<p>Теперь созданную маску можно применять для создания PNG. Для того что бы получить имя файла соданного изображения-маски, нужно обратиться в внутренней переменной <strong>TSFE: lastImgResourceInfo</strong>. Переменная представляет собой массив с информацией о последнем сгенерированном изображении функцией IMG_RESOURCE. Если для генерации использовалась функция IMAGE, то аналогичная информация будет размещаться в переменной <strong>TSFE:lastImageInfo</strong>. Поскольку я использую PNG для задания фона, то меня интересуют в этом массиве так же и размеры маски, что бы задать правильные размеры блоку для которого будет определяться фон.</p>
<p>Налоджение маски альфа-канала (продолжение предыдущего листинга):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="code"><pre class="txt" style="font-family:monospace;">        stdWrap.override.cObject = COA
        stdWrap.override.cObject {
&nbsp;
          10 = TEXT
          10.data = TSFE:lastImgResourceInfo|0
          10.noTrimWrap= |style=&quot;width:|px;|
&nbsp;
          20 = IMG_RESOURCE
          20 {          
            file.import.data = TSFE:lastImgResourceInfo|3
            file.params = -background white -channel A -combine    
            stdWrap.noTrimWrap = |background-image:url(|);&quot;|
          }
        }</pre></td></tr></table></div>

<p>И финальный рабочий код меню с PNG:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>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
</pre></td><td class="code"><pre class="txt" style="font-family:monospace;">    10 = HMENU
    10 {
      wrap = &lt;ul id=&quot;menu-main&quot;&gt;|&lt;/ul&gt;
      1 = TMENU
&nbsp;
      1.NO.allWrap = &lt;li class=&quot;first&quot;&gt;| |*|&lt;li&gt;|
      1.NO.wrapItemAndSub = |&lt;/li&gt;
&nbsp;
&nbsp;
      1.NO.ATagParams.cObject = IMG_RESOURCE
      1.NO.ATagParams.cObject {              
        # Generate mask with text
        file = GIFBUILDER
        file {
          XY = [20.w]+5,[20.h]+5
          format = png
          quality = 100
          backColor = #ffffff
&nbsp;
          20 = TEXT
          20 {
            text.field = title
            text.case = upper
            fontSize = 11
            fontColor = #000000
            fontFile = fileadmin/fonts/tahomabd.ttf
            offset = 1,9            
            niceText = 1 
            niceText.scaleFactor = 5
          }
        }
&nbsp;
        # Generate image with appliyed Mask to alpha chanel
        stdWrap.override.cObject = COA
        stdWrap.override.cObject {
&nbsp;
          10 = TEXT
          10.data = TSFE:lastImgResourceInfo|0
          10.noTrimWrap= |style=&quot;width:|px;|
&nbsp;
          15 = TEXT
          15.data = TSFE:lastImgResourceInfo|1
          15.noTrimWrap = | height:|px;|
&nbsp;
          20 = IMG_RESOURCE
          20 {          
            file.import.data = TSFE:lastImgResourceInfo|3
            file.params = -background white -channel A -combine    
            stdWrap.noTrimWrap = |background-image:url(|);&quot;|
          }
        }
      }           
    }</pre></td></tr></table></div>

<p>Несмотря на то что меню графическое, оно полностью &#8220;SEO-безопастное&#8221;, так как содержит в HTML текст пункта. Что бы текст не отображался в поверх картинки используем известный css-tric: #menu-main li a { display:block; text-indent:-9999px; }. Результат работы данного кода следующий:<br />
<a href='http://codeline.richmd.ru/wp-content/uploads/2008/09/png-alpha.png' rel='shadowbox[post-47];player=img;'><img src="http://codeline.richmd.ru/wp-content/uploads/2008/09/png-alpha-300x65.png" alt="png-alpha" title="png-alpha" width="300" height="65" class="size-medium wp-image-49" /></a></p>
<p>Конечно в данном случае рассматривается только генерация одноцветных изображений с маской (надписей). К сожалению я не очень силен в работе с ImageMagick и не знаю как можно правильно скомбинировать готовое изображение с альфа-каналом. Если кто то поможет и покажет какие параметры задаются для ImageMagick, то я смогу продемонстрировать TypoScript для генерация произвольного изображения с использованием PNG-alpha.</p>
]]></content:encoded>
			<wfw:commentRss>http://codeline.richmd.ru/2008/09/%d0%b3%d0%b5%d0%bd%d0%b5%d1%80%d0%b0%d1%86%d0%b8%d1%8f-png-%d1%81-alpha-%d0%ba%d0%b0%d0%bd%d0%b0%d0%bb%d0%be%d0%bc-%d0%b2-typo3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
