<?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>La Case de l&#039;Oncle Tom &#187; image magick</title>
	<atom:link href="http://case.oncle-tom.net/tag/image-magick/feed/" rel="self" type="application/rss+xml" />
	<link>http://case.oncle-tom.net</link>
	<description>Développement Web, bonnes pratiques et performances</description>
	<lastBuildDate>Sun, 25 Dec 2011 19:33:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<atom:link rel="search"
           href="http://case.oncle-tom.net/opensearch"
           type="application/opensearchdescription+xml"
           title="Content Search" />		<item>
		<title>Créer une vignette d&#8217;un PDF avec Image Magick</title>
		<link>http://case.oncle-tom.net/2009/thumbnail-pdf-image-magick/</link>
		<comments>http://case.oncle-tom.net/2009/thumbnail-pdf-image-magick/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 05:00:24 +0000</pubDate>
		<dc:creator>Oncle Tom</dc:creator>
				<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[image]]></category>
		<category><![CDATA[image magick]]></category>
		<category><![CDATA[imagick]]></category>
		<category><![CDATA[logiciels libres]]></category>
		<category><![CDATA[pdf]]></category>
		<category><![CDATA[php]]></category>
		<guid isPermaLink="false">http://case.oncle-tom.net/?p=1374</guid>
		<description><![CDATA[Les PDF c&#8217;est chouette pour transmettre des documents non-modifiables. Mais parfois, c&#8217;est aussi pratique de pouvoir en suggérer leur contenu. C&#8217;est d&#8217;autant plus pertinent si vous en proposez à télécharger et que la couverture alléchante dispose d&#8217;un fort pouvoir de conviction. Par chance, nous n&#8217;avons pas besoin de faire le sale travail à la main. [...]]]></description>
			<content:encoded><![CDATA[<p>Les <acronym title="Portable Document Format">PDF</acronym> c&#8217;est chouette pour transmettre des documents non-modifiables. Mais parfois, c&#8217;est aussi pratique de pouvoir en suggérer leur contenu. C&#8217;est d&#8217;autant plus pertinent si vous en proposez à télécharger et que la couverture alléchante dispose d&#8217;un fort pouvoir de conviction.</p>
<img class="size-full wp-image-1376" title="Exemple de couverture PDF" src="http://case.oncle-tom.net/images/2009/06/pdf-sample-cover.png" alt="Exemple de couverture PDF" width="281" height="374" />
<p>Par chance, nous n&#8217;avons pas besoin de faire le sale travail à la main. Du genre prendre une capture d&#8217;écran de la première page du <acronym title="Portable Document Format">PDF</acronym> ou je ne sais quelle autre astuce impliquant travail et effort. <strong>Image Magick</strong> est là pour nous aider et à plus forte raison, <strong>Imagick</strong>. Il s&#8217;agit d&#8217;une librairie native à <acronym title="Pre-Hypertext Processing">PHP</acronym> se basant sur l&#8217;<acronym title="Application Programming Interface">API</acronym> d&#8217;Image Magick.</p>
<p>Vous me direz : oui mais Image Magick c&#8217;est fait pour manipuler des images. Certes mais <em>un <acronym title="Portable Document Format">PDF</acronym>, c&#8217;est un peu comme une image</em>.</p>
<p><span id="more-1374"></span></p>
<h3>Convertir un <acronym title="Portable Document Format">PDF</acronym> mono-page</h3>
<p>Partons d&#8217;un cas simple : votre <acronym title="Portable Document Format">PDF</acronym> ne contient qu&#8217;une page. Le code est d&#8217;une grande simplicité :</p>
<pre><code class="php">&lt;?php
$im = new Imagick('/chemin/vers/pdf-mono-page.pdf');
$im-&gt;writeImage('/chemin/vers/couverture.png');</code></pre>
<p>2 lignes ont suffit à créer notre prévisualisation. Cette manipulation enregistre une image au format <acronym title="Portable Network Graphics">PNG</acronym> sans aucune compression. Nous pourrions l&#8217;activer et régler le taux de compression avec 2 lignes supplémentaires :</p>
<pre><code class="php">$im-&gt;setCompression(Imagick::COMPRESSION_LZW);
$im-&gt;setCompressionQuality(90);</code></pre>
<p>LZW est un algorithme de compression sans perte utilisé entre autre par <acronym title="Portable Network Graphics">PNG</acronym> et <acronym title="Graphics Interchange Format">GIF</acronym>. On aurait pu choisir du <acronym title="Joint Photographics Experts Group">JPEG</acronym> sans perte ou une autre <a href="http://fr.php.net/manual/en/imagick.constants.php">constante de compression d&#8217;Image Magick</a>.</p>
<h3>Convertir un <acronym title="Portable Document Format">PDF</acronym> multi-pages</h3>
<p>Que se passerait-il si notre code précédent était utilisé sur un <acronym title="Portable Document Format">PDF</acronym> contenant plus d&#8217;une page ? Et bien seule la dernière page du document serait enregistrée. En fait, toutes les pages seraient enregistrées jusqu&#8217;à la dernière (pas terrible côté performances donc).<br />
L&#8217;<acronym title="Application Programming Interface">API</acronym> d&#8217;Image Magick nous permet toutefois de connaître le nombre d&#8217;images impliquées et d&#8217;en définir l&#8217;index. Depuis PHP5, Imagick fournit des méthodes propres aux interfaces Iterator et Traversable.</p>
<p>Notre code bouge &#8230; mais pas tant que ça. Disons que nous souhaitons prévisualiser la 6ème page du document (donc l&#8217;index 5) :</p>
<pre><code class="php">$im = new Imagick('/chemin/vers/pdf-multi-pages.pdf');
$im-&gt;setIteratorIndex(5);
$im-&gt;setCompression(Imagick::COMPRESSION_LZW);
$im-&gt;setCompressionQuality(90);
$im-&gt;writeImage('/chemin/vers/couverture.png');</code></pre>
<p>Une petite ligne de plus fait l&#8217;affaire. Pour compter le nombre d&#8217;images contenues dans le document ouvert, un appel à la méthode getNumberImages fera l&#8217;affaire.</p>
<h3>Convertir directement avec Image Magick : convert</h3>
<p>Pour les amateurs du shell ou les détracteurs de <acronym title="Pre-Hypertext Processing">PHP</acronym>, on peut arriver aux mêmes résultats en 1 ligne de commande. L&#8217;outil de conversion est fourni par <a href="http://www.imagemagick.org/script/convert.php">convert</a>. Sa documentation et ses options sont particulièrement riches. On peut tout faire &#8230; ou presque !</p>
<pre><code class="bash">convert /chemin/vers/pdf-mono-page.pdf /chemin/vers/couverture.png
convert /chemin/vers/pdf-multi-pages.pdf[5] /chemin/vers/couverture.png</code></pre>
<p>La seule différence réside dans les crochets suivant le nom du fichier d&#8217;entrée. Vous avez bien sûr deviné qu&#8217;il s&#8217;agit de l&#8217;index du document <acronym title="Portable Document Format">PDF</acronym> que l&#8217;on convertit. Si on ne précise rien, <strong>convert</strong> convertira toutes les pages du document mais cette fois, en les exportant dans des fichiers uniques (pas de réécriture qui tienne).</p>
<h3>Conclusion</h3>
<p><strong>Image Magick est vraiment une application sympathique</strong>. Les possibilités de manipulation offertes surpassent à mes yeux largement celles de la librairie GD (qui est toujours mieux que rien).</p>
<p>Cette manipulation permettrait aussi de décomposer les multiples images composant un <acronym title="Graphics Interchange Format">GIF</acronym> animé ou un APNG. Ou inversement, nous pourrions créer une animation à partir de plusieurs images. Ou encore créer une vignette carrée et centrée. Les possibilités ne manquent pas.</p>
<p>C&#8217;était également une autre façon de <em>teaser</em> le projet le plus chronophage qui m&#8217;ait été donné de connaître mais bon, en septembre c&#8217;est dans les bacs. Toujours pas d&#8217;idées sur le sujet couvert ? <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>]]></content:encoded>
			<wfw:commentRss>http://case.oncle-tom.net/2009/thumbnail-pdf-image-magick/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
	</channel>
</rss>

