<?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>ManCanDo - PhP, MySQL, DIY, porady i triki &#187; &#187; tutorial</title>
	<atom:link href="http://www.mancando.pl/category/tutorial/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mancando.pl</link>
	<description>Co kupować a czego nie? Ciekawostki z zakresu programowania w PHP. Sztuczki i kruczki MySQL. Zagadnienia z zakresu grafiki komputerowej. Opisy ciekawych rzeczy, które można wykonać samodzielnie.</description>
	<lastBuildDate>Thu, 05 Dec 2013 18:50:19 +0000</lastBuildDate>
	<language>pl-PL</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.0.38</generator>
	<item>
		<title>PHP &#8211; operacje na ciągach znaków &#8211; zamiana liter na małe</title>
		<link>http://www.mancando.pl/php-operacje-na-ciagach-znakow-zamiana-liter-na-male/</link>
		<comments>http://www.mancando.pl/php-operacje-na-ciagach-znakow-zamiana-liter-na-male/#comments</comments>
		<pubDate>Wed, 18 Sep 2013 11:57:09 +0000</pubDate>
		<dc:creator><![CDATA[Piotrek]]></dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[programowanie]]></category>

		<guid isPermaLink="false">http://www.mancando.pl/?p=350</guid>
		<description><![CDATA[Operacje na ciągach znaków to jedne z popularniejszych zadań programistycznych  realizowanych w typowym projekcie serwisu internetowego tworzonego przy pomocy PhP. Jedną z popularnych operacji wykonywanych na ciągach znaków to konwersja na ciągi złożone jedynie z małych liter. Realizacja tego zadania &#8230; <a href="http://www.mancando.pl/php-operacje-na-ciagach-znakow-zamiana-liter-na-male/">Czytaj dalej <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[
<!-- Easy Plugin for AdSense V7.51 -->
<!-- [leadin: 2 urCount: 2 urMax: 0] -->
<div class="ezAdsense adsense adsense-leadin" style="text-align:center;margin:20px 0px;"><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- mancando-poziomy -->
<ins class="adsbygoogle"
     style="display:inline-block;width:728px;height:90px"
     data-ad-client="ca-pub-2234288553315702"
     data-ad-slot="2233930472"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script></div>
<!-- Easy Plugin for AdSense V7.51 -->
<p><img class="alignright size-full wp-image-50" style="border: 0px none;" alt="komputerek_php" src="http://www.mancando.pl/wp-content/uploads/2013/01/komputerek_php.png" width="70" height="73" />Operacje na ciągach znaków to jedne z popularniejszych zadań programistycznych  realizowanych w typowym projekcie serwisu internetowego tworzonego przy pomocy PhP. Jedną z popularnych operacji wykonywanych na ciągach znaków to konwersja na ciągi złożone jedynie z małych liter. Realizacja tego zadania jest raczej trywialna. Wystarczy, że użyjecie dostępną w PhP <img class="alignright size-full wp-image-51" style="border: 0px none;" alt="komputerek_mysql" src="http://www.mancando.pl/wp-content/uploads/2013/01/komputerek_mysql.png" width="70" height="68" />funkcję <strong>strtolower()</strong> lub w przypadku zamiany pierwszej litery <strong>lcfirst()</strong>.</p>
<p>Zadanie robi się już nieco trudniejsze gdy przyjedzie Wam pracować z ciągami znaków wśród których znajdą się litery odpowiadające znakom diakretycznym charakterystycznym dla danego narodowego alfabetu. Użycie funkcji <strong>strtolower</strong> oraz <strong>lcfirst</strong> nie spowoduje że tego typu duże litery będą zamienione na małe. Znaki wykraczające poza zakres liter ‚alphabetic’ są pomijane przez te funkcję.</p>
<p><span id="more-350"></span></p>
<p>W takich sytuacjach z pomocą przyjdzie Wam funkcja <strong>mb_strtolower($string, $encoding)</strong> dostępna w ramach rozszerzenia <strong>Multibyte String Functions</strong>. Drugi (opcjonalny) argument tej funkcji określa kodowanie znaków konwertowanego ciągu znaków. Pozwala to na obsłużenie praktycznie każdego języka jaki jest obecnie używany w internecie. Warto dodać, że rozszerzenie to nie jest domyślnym rozszerzeniem PhP a co za tym idzie, nie każdy na każdym hostingu możliwe będzie skorzystanie z funkcji <strong>mb_strtolower()</strong>.</p>
<p>W ramach uzupełnienia tematu dodam jeszcze mały tutorial z zakresu <strong>MySQL</strong> odpowiadający na pytanie: A co zrobić w przypadku, gdy to w bazie danych w jednej z kolumn tabeli mam ciąg znaków, który w trwały sposób chciałbym zamienić na wyrazy składające się tylko z małych liter. Oczywiście można tę operację wykonać po stronie PhP za pomocą funkcji wymienionych wyżej. Jednak znacznie bardziej optymalnym i szybszym rozwiązaniem będzie wykonanie tej operacji za pomocą pojedynczego zapytania UPDATE. Poniżej znajdziecie przykład tego typu zapytania SQL:<br />
<code>UPDATE `tabela` SET `nazwa_kolumny`=LOWER(`nazwa_kolumny`);</code><br />
Po wykonaniu tego zapytania, we wszystkich rekordach w kolumnie `nazwa_kolumny` znajdą się ciągi znaków składające się tylko z małych liter.</p>

<!-- Easy Plugin for AdSense V7.51 -->
<!-- [leadout: 3 urCount: 3 urMax: 0] -->
<div class="ezAdsense adsense adsense-leadout" style="text-align:center;margin:12px;"><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- mancando-poziomy -->
<ins class="adsbygoogle"
     style="display:inline-block;width:728px;height:90px"
     data-ad-client="ca-pub-2234288553315702"
     data-ad-slot="2233930472"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script></div>
<!-- Easy Plugin for AdSense V7.51 -->
]]></content:encoded>
			<wfw:commentRss>http://www.mancando.pl/php-operacje-na-ciagach-znakow-zamiana-liter-na-male/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cache-Control w .htaccess, czyli jak polepszyć wynik w google PageSpeed Insight</title>
		<link>http://www.mancando.pl/cache-control-w-htaccess-czyli-jak-polepszyc-wynik-w-google-pagespeed-insight/</link>
		<comments>http://www.mancando.pl/cache-control-w-htaccess-czyli-jak-polepszyc-wynik-w-google-pagespeed-insight/#comments</comments>
		<pubDate>Fri, 23 Aug 2013 11:13:55 +0000</pubDate>
		<dc:creator><![CDATA[Piotrek]]></dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[.htaccess]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[programowanie]]></category>

		<guid isPermaLink="false">http://www.mancando.pl/?p=293</guid>
		<description><![CDATA[Ostatnio z ciekawości zajrzałem do aplikacji PageSpeed Insight (PSI). Wynik mojej strony o Krecie oscylował w okolicy 75 punktów dla tradycyjnych przeglądarek dla komputerów i 61 punktów dla urządzeń mobilnych. Postanowiłem przyjrzeć się jaki element miał największy wpływ na osiągnięty &#8230; <a href="http://www.mancando.pl/cache-control-w-htaccess-czyli-jak-polepszyc-wynik-w-google-pagespeed-insight/">Czytaj dalej <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><img class="alignright" style="border: 0px none;" alt="komputerek" src="http://www.mancando.pl/wp-content/uploads/2013/01/komputerek.png" width="70" height="50" />Ostatnio z ciekawości zajrzałem do aplikacji PageSpeed Insight (PSI). Wynik mojej <a title="Kreta" href="http://www.crete.pl" target="_blank">strony o Krecie</a> oscylował w okolicy 75 punktów dla tradycyjnych przeglądarek dla komputerów i 61 punktów dla urządzeń mobilnych. Postanowiłem przyjrzeć się jaki element miał największy wpływ na osiągnięty wyniki. Okazało się że największym czynnikiem wpływającym negatywnie na punktację było pominięcie ustawienia maksymalnego wieku (daty wygaśnięcia) dla większości statycznych zasobów wykorzystywanych na stronie. W moim przypadku obejmowało to wszystkie pliki graficzne, js i css. Postanowiłem przeszukać internet pod kątem znalezienia sposobu na dołączenia do nagłówków tych elementów odpowiedniej wartości max-age.<span id="more-293"></span></p>
<p>Oczywiście wykonanie takiego zadania jest możliwe na poziomie odpowiedniej konfiguracji serwera. Jednak w przypadku zdecydowanej większości hostingów, zrealizowanie takiego zadania nie jest możliwe. W przypadku typowego wirtualnego hostingu jedynym sensownym rozwiązaniem jest wykorzystanie dobrodziejstwa pliku konfiguracyjnego .htaccess serwera Apache dla danego podkatalogu.</p>
<p>Poniżej znajdziecie odpowiedni kod dzięki któremu apache do każdego nagłówka określonego pliku doda deklarację wieku danego pliku:</p>
<pre>&lt;IfModule mod_headers.c&gt;
 &lt;FilesMatch "\.(jpg|jpeg|png|gif|swf|JPG)$"&gt;
 Header set Cache-Control "max-age=4838400, public"
 &lt;/FilesMatch&gt;
 &lt;FilesMatch "\.(css|js)$"&gt;
 Header set Cache-Control "max-age=4838400, private"
 &lt;/FilesMatch&gt;
 &lt;/IfModule&gt;</pre>
<p>W zasobach internetu znajdziecie inne podobnego rodzaju rozwiązania, warto jednak zwrócić uwagę, że w przypadku plików typu css i js Cache-Control musi mieć atrybut Private a nie Public. W przeciwnym wypadku aplikacja PSI w dalszym ciągu będzie wykazywać Wam te pliki jako takie, które nie mają określonej żywotności.</p>
<p>Pewnie niektórzy z Was zrodzi się pytanie: Czy te zmiany mają wpływ tylko i wyłącznie na punktację w PSI?</p>
<p>Oczywiście wprowadzanie tych zmian tylko i wyłącznie w celu uzyskania lepszego wyniku nie ma większego sensu (poza satysfakcją). Zdecydowanie ważniejszą korzyścią jest to, że dzięki tym zmianom Apache instruuje przeglądarkę, aby w pierwszej kolejności starała się ładować pobierane zasoby z lokalnego dysku komputera użytkownika, a nie z sieci. Oczywiście przy pierwszym wywołaniu danego elementu (np. obrazka jpg) musi on zostać pobrany, jednak każde kolejne wywołanie tego elementu będzie powodowało odwołanie do pliku znajdującego się w cache przeglądarki. Zdecydowanie skraca to czas ładowania się stron, oraz zmniejsza ilość danych przesyłanych między serwerem a komputerem użytkownika.</p>
<p>A jak zmieniło to wynik uzyskiwany przez moją stronę w PSI? Poniżej znajdziecie zrzut:<br />
<img class=" wp-image-295 alignnone" style="border: 0px none;" alt="wynik w google PageSpeed Insight" src="http://www.mancando.pl/wp-content/uploads/2013/08/PSI_wynik.jpg" width="600" height="203" /></p>
<p>Jak widać naprawdę niezły skok :).</p>
 <!-- Easy Plugin for AdSense Unfiltered [count: 5 is not less than 5] -->]]></content:encoded>
			<wfw:commentRss>http://www.mancando.pl/cache-control-w-htaccess-czyli-jak-polepszyc-wynik-w-google-pagespeed-insight/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Osadzanie dodatkowych czcionek na stronach</title>
		<link>http://www.mancando.pl/osadzanie-dodatkowych-czcionek-na-stronach/</link>
		<comments>http://www.mancando.pl/osadzanie-dodatkowych-czcionek-na-stronach/#comments</comments>
		<pubDate>Tue, 13 Aug 2013 12:22:03 +0000</pubDate>
		<dc:creator><![CDATA[Piotrek]]></dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[programowanie]]></category>

		<guid isPermaLink="false">http://www.mancando.pl/?p=290</guid>
		<description><![CDATA[Czasami zdarza się, że zaawansowany projekt graficzny strony wymaga użycia niestandardowego kroju czcionek, który dodatkowo na stronie musi być wyświetlany jako tekst. W takich przypadkach wykluczone jest zastąpienie tego tekstu przez adekwatny element graficzny. Jedynym sensownym rozwiązaniem jest wskazanie przeglądarce &#8230; <a href="http://www.mancando.pl/osadzanie-dodatkowych-czcionek-na-stronach/">Czytaj dalej <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.mancando.pl/wp-content/uploads/2013/08/css.png" rel="lightbox[290]"><img class="alignright size-full wp-image-287" style="border: 0px none;" alt="css" src="http://www.mancando.pl/wp-content/uploads/2013/08/css.png" width="70" height="62" /></a>Czasami zdarza się, że zaawansowany projekt graficzny strony wymaga użycia niestandardowego kroju czcionek, który dodatkowo na stronie musi być wyświetlany jako tekst. W takich przypadkach wykluczone jest zastąpienie tego tekstu przez adekwatny element graficzny. Jedynym sensownym rozwiązaniem jest wskazanie przeglądarce użytkownika pliku z fontami.</p>
<p>W pliku css możliwe jest to za pomocą @fotn-face. W przypadku większości przeglądarek wystarczający jest plik TTF, niestety Internet Explorer jest tu wyjątkiem wymagającym specjalnego traktowania. Od wersji 6 do wersji 8 operacja ta obsługiwana jest za pomocą pliku z EOT (Embedded OpenType).</p>
<p><span id="more-290"></span><br />
Dosyć dużym problemem jest wygenerowanie prawidłowo działającego pliku EOT. Teoretycznie pomoc powinno stanowić narzędzie WEFT dostarczane przez Microsoft. Niestety program ten jest bardzo stary i w większości wypadków mówiąc delikatnie działa mało zadowalająco (bardzo często zawiesza się oraz wypuszcza nieprawidłowe pliki). Obecnie jedynym w pełni działającym narzędziem (jakie znalazłem) umożliwiającym utworzenie sprawnego pliku EOT jest konwerter online dostępny pod wskazanym adresem:<br />
<a href="http://www.kirsle.net/wizards/ttf2eot.cgi">http://www.kirsle.net/wizards/ttf2eot.cgi</a></p>
<p>IE9 wnosi kolejną zmianę do obsługi ładowanych czcionek. W tej wersji przeglądarki obsługa opiera się na nowym formacie plików WOFF (Web Open Font Format) opracowanym przez W3C. Najprawdopodobniej w przyszłości będzie to ogólny standard przyjęty przez wszystkie popularne przeglądarki.</p>
<p>Stosowanie @font-face w pliku CSS, wymaga bardzo starannej deklaracji, szczególnie istotna jest kolejność formatów plików. Poniżej znajdziecie prawidłową kolejność, która powinna działać poprawnie na wszystkich popularnych przeglądarkach (również mobilnych):</p>
<p>@font-face {<br />
font-family: ‚MyWebFont';<br />
src: url(‚/katalog/nazwaPliku.eot’);<br />
src: url(‚/katalog/nazwaPliku.eot?#iefix’) format(‚embedded-opentype’),<br />
url(‚/katalog/nazwaPliku.woff’) format(‚woff’),<br />
url(‚/katalog/nazwaPliku.TTF’)  format(‚truetype’)<br />
font-weight: normal;<br />
font-style: normal;<br />
}</p>
<p>&nbsp;</p>
 <!-- Easy Plugin for AdSense Unfiltered [count: 5 is not less than 5] -->]]></content:encoded>
			<wfw:commentRss>http://www.mancando.pl/osadzanie-dodatkowych-czcionek-na-stronach/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache &#8211; Ładowanie pliku CSS przez linkowanie HTTP w nagłówku</title>
		<link>http://www.mancando.pl/apache-ladowanie-pliku-css-przez-linkowanie-http-w-naglowku/</link>
		<comments>http://www.mancando.pl/apache-ladowanie-pliku-css-przez-linkowanie-http-w-naglowku/#comments</comments>
		<pubDate>Thu, 08 Aug 2013 11:07:56 +0000</pubDate>
		<dc:creator><![CDATA[Piotrek]]></dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[programowanie]]></category>

		<guid isPermaLink="false">http://www.mancando.pl/?p=285</guid>
		<description><![CDATA[Jedną z ciekawszych właściwości jakie daje Apache to linkowanie przez nagłówek dokumentu. Dodając poniższą linię kodu w pliku .htaccess: Header add Link ";rel=stylesheet;type=text/css" spowodujemy, że w nagłówku każdego wywołanego dokumentu (który znajduje się pod &#8222;wpływem&#8221; tego pliku .htacces) zostanie dodane &#8230; <a href="http://www.mancando.pl/apache-ladowanie-pliku-css-przez-linkowanie-http-w-naglowku/">Czytaj dalej <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-287" style="border: 0px none;" alt="css" src="http://www.mancando.pl/wp-content/uploads/2013/08/css.png" width="70" height="62" />Jedną z ciekawszych właściwości jakie daje Apache to linkowanie przez nagłówek dokumentu. Dodając poniższą linię kodu w pliku <strong>.htaccess</strong>:<br />
<code>Header add Link ";rel=stylesheet;type=text/css"</code><br />
spowodujemy, że w nagłówku każdego wywołanego dokumentu (który znajduje się pod &#8222;wpływem&#8221; tego pliku <strong>.htacces</strong>) zostanie dodane odwołanie do wskazanego arkusza<strong> main.css</strong>.</p>
<p>Pewnie w tym momencie zaświecą się oczy wielu osobom, które chciały by ukryć w ten sposób arkusz stylów przed &#8222;przeciętnymi&#8221; użytkownikami. Niestety muszę ostudzić Wasz zapał, gdyż ta metoda linkowania ma również jedną bardzo dużą wadę dyskwalifikującą ją z powszechnego użycia &#8230; w tej chwili metoda ta jest obsługiwana jedynie przez Operę i Firefoxa.</p>
<p>W dalszym ciągu tego sposobu ładowania pliku CSS można użyć jeśli chcemy dodać &#8222;spersonalizowane&#8221; style dla przeglądarek obsługujących tę metodę linkowania. Na chwilę obecną to chyba jedne sensowne zastosowanie dla tej metody.</p>
 <!-- Easy Plugin for AdSense Unfiltered [count: 5 is not less than 5] -->]]></content:encoded>
			<wfw:commentRss>http://www.mancando.pl/apache-ladowanie-pliku-css-przez-linkowanie-http-w-naglowku/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Text do PNG &#8211; czyli jak korzystać z GD2</title>
		<link>http://www.mancando.pl/text-do-png-czyli-jak-korzystac-z-gd2/</link>
		<comments>http://www.mancando.pl/text-do-png-czyli-jak-korzystac-z-gd2/#comments</comments>
		<pubDate>Thu, 25 Jul 2013 14:04:29 +0000</pubDate>
		<dc:creator><![CDATA[Piotrek]]></dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[programowanie]]></category>

		<guid isPermaLink="false">http://www.mancando.pl/?p=271</guid>
		<description><![CDATA[Biblioteka GD2 to jedno z ciekawszych narzędzi, które są dostępne w PHP znacznie poszerzając jego możliwości. Od dłuższego czasu biblioteka ta jest dostępna w ramach prawie każdego hostingu oferowanego na rynku. Warto więc zapoznać się z możliwościami GD2, gdyż jego &#8230; <a href="http://www.mancando.pl/text-do-png-czyli-jak-korzystac-z-gd2/">Czytaj dalej <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-50" style="border: 0px none;" alt="komputerek_php" src="http://www.mancando.pl/wp-content/uploads/2013/01/komputerek_php.png" width="70" height="73" /><strong>Biblioteka GD2</strong> to jedno z ciekawszych narzędzi, które są dostępne w PHP znacznie poszerzając jego możliwości. Od dłuższego czasu biblioteka ta jest dostępna w ramach prawie każdego hostingu oferowanego na rynku. Warto więc zapoznać się z możliwościami GD2, gdyż jego znajomość pozwala na wykonywanie bardzo ciekawych operacji. Z bardziej popularnych można wymienić choćby takie, jak: skalowanie rozmiaru pliku graficznego, tworzenie zupełnie nowych obrazów, zmiana typu pliku, konwersja koloru do przeźroczystości, nakładanie napisów na zdjęcia, odczyt danych EXIF &#8230; i wiele, wiele innych.</p>
<p>Jednym z popularnych zadań jakie może realizować GD to konwersja tekstu do pliku graficznego. Poniżej znajdziecie przykładowy listing w którym przestawiam realizację takiej operacji. Oczywiście należy potraktować ten kod bardziej jako przykład możliwości niż samo rozwiązanie tego zagadnienia.<br />
<span id="more-271"></span><br />
<code>&lt;?php<br />
header('Content-Type: image/png');</p>
<p>$text = intval($_GET['text']);</p>
<p>switch ($text) {<br />
case 1:<br />
$text = 'text1';<br />
break;<br />
case 2:<br />
$text = 'text2';<br />
break;<br />
case 3:<br />
$text = 'text3';<br />
break;<br />
default:<br />
$text = 'text0';<br />
break;<br />
}</p>
<p>$im = imagecreatetruecolor(100, 30);</p>
<p>$bg_color = imagecolorallocate($im, 255, 255, 255);<br />
$shadow_color = imagecolorallocate($im, 128, 128, 128);<br />
$tekst_color = imagecolorallocate($im, 140, 20, 20);</p>
<p>imagefilledrectangle($im, 0, 0, 99, 29, $bg_color);</p>
<p>putenv('GDFONTPATH=' . realpath('.'));<br />
$font='arial.ttf';</p>
<p>imagettftext($im, 20, 0, 14, 26, $shadow_color, $font, $text);<br />
imagefilter($im, IMG_FILTER_SMOOTH, 1);<br />
imagettftext($im, 20, 0, 12, 24, $tekst_color, $font, $text);</p>
<p>imagepng($im);<br />
imagedestroy($im);<br />
?&gt;</code></p>
<p>Omawianie początkowego kodu zawierającego definicję tekstów poddawanych konwersji pomijam, właściwe wykorzystanie GD2 rozpoczyna się na etapie tworzenia zasobu zawierającego obrazek. Za działanie to odpowiada funkcja: <code>imagecreatetruecolor()</code>. Argumenty tej funkcji to szerokość oraz wysokość utworzonego obrazka. Funkcja zwraca identyfikator zasobu lub &#8222;false&#8221; w przypadku błędnego działania. Utworzony obrazek będzie miał założone wymiary oraz zostanie wypełniony czarnym kolorem.</p>
<p>W kolejnym kroku definiowane są kolory przypisane do utworzonego obrazka. Operację tę realizuje funkcja <code>imagecolorallocate(resource $image , int $red , int $green , int $blue )</code>. Argumenty tej funkcji to: $image &#8211; identyfikator zasobu, $red &#8211; poziom wartości koloru czerwonego 0-255, $blue &#8211; poziom wartości koloru niebieskiego 0-255, $green &#8211; poziom wartości koloru zielonego 0-255. Jeśli zależy Wam aby przypisany kolor odpowiadał konkretnej barwie, to w celu uzyskania wartości jego składowych w przestrzeni barw RGB, najlepiej skorzystać z jednego z programów graficznych (GIMP, Photoshop) lub innego narzędzia, gdzie możecie podejrzeć te wartości.</p>
<p>Tak jak pisałem wcześniej, utworzony obrazek będzie w całości wypełniony czarnym kolorem. Korzystając w funkcji<code> imagefilledrectangle()</code> wypełnimy go w całości białym kolorem. Funkcja ta ma następujące argumenty: resource $image &#8211; identyfikator zasobu , int $x1 &#8211; wartość współrzędnej x punktu początkowego , int $y1 &#8211; wartość współrzędnej y punktu początkowego  , int $x2 &#8211; wartość współrzędnej x punktu końcowego, int $y2  &#8211; wartość współrzędnej y punktu końcowego, int $color &#8211; identyfikator koloru wykorzystanego do wypełnienia. Warto zwrócić uwagę, że wartości współrzędnych punktu początkowego i końcowego operują od 0, co oznacza że w przypadku naszego obrazka zakres wartości x mieści się w przedziale &lt;0,99&gt; a współrzędnej y w przedziale &lt;0,29&gt;.</p>
<p>Kolejna operacja jaką musimy wykonać, to podanie miejsca w którym znajdują się kroje czcionek jakie chcemy wykorzystać przy pomocy biblioteki GD2. Za wykonanie tej operacji odpowiada funkcja <code>putenv('GDFONTPATH=' . realpath('.'))</code>. Wynikiem działania tej funkcji jest przypisanie danej wartości do zmiennej środowiskowej serwera. Warto zauważyć, że wykonane działanie ma jedynie zasięg lokalny i jest widoczne jedynie dla danego skryptu PHP w którym funkcja została użyta. W naszym przypadku do zmiennej środowiskowej <strong>GDFONTPATH</strong> została przypisana wartość funkcji <code>realpath('.')</code>, czyli ścieżka do bieżącego katalogu w którym znajduje się skrypt. W przypadku, gdy plik z krojem czcionki znajduje się w innym katalogu, musicie wskazać poprawny adres do właściwego  katalogu.</p>
<p>W kolejnym kroku utworzymy cień do napisu. Budując tego typu obrazki musicie rozdzielić je na poszczególne warstwy składowe, które będą tworzone w odpowiedniej kolejności. Cień znajduje się nad tłem ale pod finalnym tekstem, więc musi być on utworzony między tymi warstwami.</p>
<p>Do transformacji tekstu na obraz posłużymy się funkcją <code>imagettftext()</code>. Funkcja ta ma następujące argumenty: $image &#8211; identyfikator zasobu , $size &#8211; wielkość textu , $angle &#8211; kąt pod jakim tekst będzie pisany , $x &#8211; wartość współrzędnej x początkowego punktu , $y &#8211; wartość współrzędnej y punktu , $color  &#8211; identyfikator koloru, $fontfile &#8211; ścieżka do pliku z krojem czcionki , $text &#8211; tekst przeznaczony do konwersji. W celu uzyskania bardziej rzeczywistego wyglądu cienia, stosując funkcję <code>imagefilter($im, IMG_FILTER_SMOOTH, 1)</code> &#8211; wykonamy rozmycie obrazka. Oczywiście rozmycie będzie dotyczyły bieżącego stanu w jakim znajduje się grafika, zastosowanie filtru nie ma wpływu na kolejne warstwy i efekty stosowane na dany obrazek.</p>
<p>Korzystając znów z funkcji <code>imagettftext()</code> dodamy właściwy tekst, który będzie przesunięty o 2 piksele w górę i w lewo w stosunku do cienia. W ostatnim kroku z uzyskanego zasobu $im uzyskamy finalny obrazek w postaci PNG. Działanie to realizowane jest za pośrednictwem polecenia <code>imagepng($im)</code>. Na samym końcu niszczymy utworzony zasób $im &#8211; <code>imagedestroy($im)</code>.</p>
<p>Wywołanie w przeglądarce pliku zawierającego powyższy kod, spowoduje wyświetlenie się utworzonego obrazka. Warto zauważyć, że w przypadku gdy nie prześlemy w nagłówku informacji o formacie pliku &#8211; <code>header('Content-Type: image/png')</code>; &#8211; po wywołaniu pliku w w oknie przeglądarki plik będzie prezentowany jako plik tekstowy a nie plik graficzny. Mam nadzieję że zachęciłem Was do nauki i zabawy z biblioteką GD2.</p>
 <!-- Easy Plugin for AdSense Unfiltered [count: 5 is not less than 5] -->]]></content:encoded>
			<wfw:commentRss>http://www.mancando.pl/text-do-png-czyli-jak-korzystac-z-gd2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Irfan View &#8211; wsadowa konwersja plików</title>
		<link>http://www.mancando.pl/irfan-view-wsadowa-konwersja-plikow/</link>
		<comments>http://www.mancando.pl/irfan-view-wsadowa-konwersja-plikow/#comments</comments>
		<pubDate>Thu, 23 May 2013 13:59:12 +0000</pubDate>
		<dc:creator><![CDATA[Piotrek]]></dc:creator>
				<category><![CDATA[fotografia]]></category>
		<category><![CDATA[grafika]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[Irfan View]]></category>
		<category><![CDATA[obróbka zdjęć]]></category>
		<category><![CDATA[zdjęcia]]></category>

		<guid isPermaLink="false">http://www.mancando.pl/?p=243</guid>
		<description><![CDATA[Publikacja zdjęć w internecie to niejednokrotnie konieczność przygotowania kilkudziesięciu lub nawet kilkuset zdjęć do danego pożądanego format plików o określonych parametrach.. Oczywiście znajdzie się grono osób które powiedzą, że wrzucają zdjęcia bez dodatkowej obróbki. Takie podejście to nonszalacja w stosunku &#8230; <a href="http://www.mancando.pl/irfan-view-wsadowa-konwersja-plikow/">Czytaj dalej <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-214" style="border: 0px none;" alt="foto" src="http://www.mancando.pl/wp-content/uploads/2013/05/foto.png" width="70" height="70" />Publikacja zdjęć w internecie to niejednokrotnie konieczność <strong>przygotowania kilkudziesięciu lub nawet kilkuset zdjęć</strong> do danego pożądanego format plików o określonych parametrach.. Oczywiście znajdzie się grono osób które powiedzą, że wrzucają zdjęcia bez dodatkowej obróbki. Takie podejście to nonszalacja w stosunku do optymalizacji strony mogąca równać się zwiększonemu obciążeniu serwera oraz mało efektywnemu wykorzystania jego przestrzeni dyskowej. Poza tym duże pliki zwiększają również czas ładowania się strony w przeglądarce użytkownika.</p>
<p>Zdecydowanie najlepszym rozwiązaniem jest przygotowanie zdjęć w postaci takich plików graficznych, których rozmiar jest jak najbardziej zbliżony (najlepiej równy) rozmiarom jakie są wymagane do publikacji. Ważnym elementem jest również zastosowanie odpowiedniej kompresji, która bez znacznego uszczerbku dla jakości pliku pozwoli na optymalizację wielkości czyli zmniejszenie &#8222;wagi&#8221; pliku. Właśnie takie podejście znacznie poprawia czas ładowania się zdjęć na stronie &#8230; ale o optymalizacji strony wypowiem się innym razem.</p>
<p><span id="more-243"></span></p>
<p>Wróćmy jednak do pierwotnego zagadnienia &#8230; jak szybko i skutecznie przetworzyć dużą ilość plików? Jednym z najprostszych, najtańszych i najszybszych rozwiązań jest wykorzystanie darmowego programu Irfan View (dostępnego na tej stronie &#8211; <a title="Irfan View" href="http://www.irfanview.com/">Irfan View</a>). Spora część osób na pewno zna ten program i korzystanie z niego jako z przeglądarki do zdjęć. Mimo swej pozornej prostoty Irfan View to nie tylko przeglądarka lecz również narzędzie skrywające w sobie wiele innych możliwości. Właśnie w tym programie można dokonać konwersji wsadowej wielu plików.</p>
<p><a href="http://www.mancando.pl/wp-content/uploads/2013/05/iview1.jpg" rel="lightbox[243]"><img alt="iview1" src="http://www.mancando.pl/wp-content/uploads/2013/05/iview1.jpg" width="560" height="443" /></a></p>
<p>W celu uzyskania tego efektu trzeba kliknąć w opcję menu <strong>File</strong> a następnie wybrać opcję <strong>Batch Conversion/Rename&#8230;</strong> (lub naciskając na klawiaturze <strong>klawisz B</strong>). Otworzy się kolejne okno z dodatkowymi opcjami. W górnej części z prawej strony znajduje się eksplorator zasobów komputera w którym musicie przejść do odpowiedniego podkatalogu zawierającego pliki które mają być przetworzone. Korzystając z przycisku <strong>Add all</strong> (wszystkie pliki z danego podkatalogu) lub też zaznaczając odpowiednie pliki które mają być przetworzone a następnie naciskając przycisk <strong>Add</strong> uzupełniamy listę plików które będą konwertowane (lista znajduje się w górnej lewej części okna). Operacja uzupełniania listy może być ponawiana, dodawane pliki mogą znajdować się w kilku podkatalogach.</p>
<p><a href="http://www.mancando.pl/wp-content/uploads/2013/05/iview2.jpg" rel="lightbox[243]"><img alt="iview2" src="http://www.mancando.pl/wp-content/uploads/2013/05/iview2.jpg" width="560" height="441" /></a></p>
<p>Po zakończeniu operacji dodania ważne jest wykonanie odpowiedniego sortowania listy plików. Pierwotna kolejność plików na liście uzależniona jest od zaznaczenia oraz od kolejności dodawania do listy (co oczywiście też można wykorzystać i w określonych sytuacjach może być pożądane). W przypadku gdy chcemy ustawić pliki wedle nazwy lub też według daty wykonania zdjęcia musimy skorzystać z przycisku <strong>Sort file</strong>.</p>
<p>Wyświetlone zostanie okno <strong>Advanced/Sort options</strong>, w którym można wybrać odpowiednią metodę sortowania plików. W moim przypadku było to <strong>by Name (ascending XP style)</strong>. Po wybraniu odpowiedniej opcji kliknij <strong>OK</strong> &#8211; lista pików zostanie posortowana wedle zadanego sposobu.</p>
<p><a href="http://www.mancando.pl/wp-content/uploads/2013/05/iview3.jpg" rel="lightbox[243]"><img alt="iview3" src="http://www.mancando.pl/wp-content/uploads/2013/05/iview3.jpg" width="396" height="267" /></a></p>
<p>Kolejnym krokiem jest ustawienie odpowiednich parametrów plików wyjściowych. Wcześniej jednak trzeba zdefinować katalog wyjściowy &#8211; <strong>Output direcory</strong>, gdzie będą zapisywane gotowe pliki. Wpisz odpowiednią ścieżkę lube też wskaż katalog korzystając z przycisku <strong>Browse</strong>. Następnie wybierz odpowiedni tryb pracy w moim przypadku była to opcja <strong>Batch conversion &#8211; Rename result files</strong> &#8211; konwersja plików wraz ze zmiana nazwy.</p>
<p><a href="http://www.mancando.pl/wp-content/uploads/2013/05/iview4.jpg" rel="lightbox[243]"><img alt="iview4" src="http://www.mancando.pl/wp-content/uploads/2013/05/iview4.jpg" width="559" height="437" /></a></p>
<p>Następnie możesz zdefiniować parametry plików wyjściowych <strong>Batch conversion settings</strong>. W pierwszej kolejności wybierz format pliku <strong>Output format</strong> &#8211; <strong>JPG &#8211; JPGE Format</strong>. Osobiście zawsze mam zaznaczoną opcję <strong>Use advanced options</strong>. Po zaznaczeniu tego checboxa kliknij w przycisk <strong>Advanced options</strong>. Otworzy się okno <strong>Settings for all images</strong>. Zaznacz opcję<strong> RESIZE</strong> a następnie opcję <strong>Set new size</strong> i w tej sekcji opcję <strong>Set long side to</strong>: <strong>Height</strong> oraz wpisz wartość 900 pixels (lub inna wymaganą. Poniżej warto zaznaczyć też takie opcje jak: <strong>Preserve aspect ratio (proportional)</strong>, <strong>Use Resample function (better quality)</strong>, <strong>Don&#8217;t enlarge smaller images</strong>. W zależności od preferencji można również skorzystać z dodatkowych funkcji dostępnych z prawej strony.</p>
<p><a href="http://www.mancando.pl/wp-content/uploads/2013/05/iview5.jpg" rel="lightbox[243]"><img alt="iview5" src="http://www.mancando.pl/wp-content/uploads/2013/05/iview5.jpg" width="559" height="437" /></a></p>
<p>Ostatni krok to zdefiniowanie parametrów w sekcji <strong>Batch Rename Settings</strong>. Kliknij przycisk <strong>Set rename otions</strong>, otworzy się kolejne nowe okienko z opcjami. W pole name pattern wpisujemy właściwą wynikową nazwę pliku oraz znaki #### odzwierciedaljące numerację kolejnych zdjęć. Liczba znaków # powinna być ba tyle duża aby program miał możliwość wyrazić cyfrę określającą ilością zdjęć które będą przetwarzane (np: 45 &#8211; to minimum dwa znaki #). W oknie tym można również ustalić wartość początkową od jakiej będą odliczane zdjęcia. W naszym przypadku będzie to wartość 1.</p>
<p><a href="http://www.mancando.pl/wp-content/uploads/2013/05/iview6.jpg" rel="lightbox[243]"><img alt="iview6" src="http://www.mancando.pl/wp-content/uploads/2013/05/iview6.jpg" width="559" height="442" /></a></p>
<p>Jeśli wszystkie parametry są już ustalone to możecie naciskać <strong>Start</strong> (górna część okna). Pojawi się okno postępu i już po chwili wszystkie przekonwertowane pliki będą … <strong>GOTOWE</strong>. Oczywiście w tym katalogu, który został wskazany jako docelowy :).</p>
<p><a href="http://www.mancando.pl/wp-content/uploads/2013/05/iview7.jpg" rel="lightbox[243]"><img alt="iview7" src="http://www.mancando.pl/wp-content/uploads/2013/05/iview7.jpg" width="559" height="437" /></a></p>
 <!-- Easy Plugin for AdSense Unfiltered [count: 5 is not less than 5] -->]]></content:encoded>
			<wfw:commentRss>http://www.mancando.pl/irfan-view-wsadowa-konwersja-plikow/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
