fix : compatibilité ImageMagick <7 et à partir de 7 (merci b_b : https://discuter.spip.net/t/pas-si-vite-avec-image-tramer/162447)

fix : renvoyer la bonne image quand elle est déjà en cache
feat : Montrer aussi tous les exemples : https://imagemagick.org/script/command-line-options.php#ordered-dither
cf : https://imagemagick.org/script/command-line-options.php#ordered-dither
master v0.7.6
RealET 1 year ago
parent b74f86b03e
commit a2e54ff1f6

@ -310,7 +310,6 @@
<p>
Tramer une image (en mode niveaux de gris) à la <a href="https://github.com/lowtechmag/solar/wiki/Solar-Web-Design#dithered-images">LOW←TECH MAGAZINE</a>
</p>
<p>Avertissement : Cette fonction est OBSOLÈTE à partir de Imagick 3.4.4. Dépendre de cette fonctionnalité est fortement déconseillé (<a href="https://www.php.net/manual/fr/imagick.orderedposterizeimage.php">extrait de la documentation de PHP Imagick::orderedPosterizeImage</a>).</p>
<dl class="codeblock">
<dt>Syntaxe</dt>
<dd><code>image_tramer{6, o8x8}</code></dd>
@ -331,7 +330,7 @@
</div>
<div class="apercu apercu_images">
<div class="apercu__item alpha on bordure"><p>originale</p>[(#CHEMIN{images/ecureuil.jpg}|balise_img)]</div>
<BOUCLE_imgtramer2(DATA){liste checks,o8x8,h8x8a,h16x16o,c5x5b,c5x5w,c6x6b,c6x6w,c7x7b,c7x7w}>
<BOUCLE_imgtramer2(DATA){liste checks,o2x2,o3x3,o4x4,o8x8,h4x4a,h6x6a,h8x8a,h4x4o,h6x6o,h8x8o,h16x16o,c5x5b,c5x5w,c6x6b,c6x6w,c7x7b,c7x7w}>
<div class="apercu__item"><p>6,#VALEUR</p>[(#CHEMIN{images/ecureuil.jpg}|image_tramer{6,#VALEUR})]</div>
</BOUCLE_imgtramer2>
</div>

@ -76,6 +76,7 @@ code {
/* apercus */
.apercu {
display: flex;
flex-wrap: wrap;
align-items: center;
margin-bottom: 1em;
}

@ -492,6 +492,7 @@ function image_float ($img, $align, $margin=10) {
// pour recuperer les valeurs
for ($j = 0; $j < $y_i; $j++) {
$transp = true;
$larg[$j] = 0;
for ($i = 0; $i < $x_i && $transp; $i++) {
@ -509,6 +510,8 @@ function image_float ($img, $align, $margin=10) {
// une deuxieme passe
// pour appliquer les valeurs
// en utilisant les valeurs precedente et suivante
$haut_tot = 0;
$forme = '';
for ($j = 0; $j < $y_i; $j++) {
$reste = ($precision - $j);
$haut_rest = $h - $haut_tot;
@ -589,7 +592,7 @@ function image_contour_alpha($im, $coul='000000', $trait=1)
if ($a != $a2) {
$dx = min(abs($ix),abs($iy));
$dy = max(abs($ix),abs($iy));
if ($mem[$dx][$dy]) $d = $mem[$dx][$dy];
if (isset($mem[$dx][$dy])) $d = $mem[$dx][$dy];
else {
$mem[$dx][$dy] = sqrt(($dx)*($dx)+($dy)*($dy));
$d = $mem[$dx][$dy];
@ -1224,22 +1227,34 @@ function image_tramer($img, $levels = 6, $thmap = 'o8x8', $color = false){
$fichier = $cache["fichier"];
$dest = $cache["fichier_dest"];
$creer = $cache["creer"];
// Renvoyer l'image originale si on n'a rien pu faire
$retour = $fichier;
if ($creer) {
if (method_exists('Imagick', 'orderedPosterizeImage')) {
if (method_exists('Imagick', 'orderedPosterizeImage') OR method_exists('Imagick', 'OrderedDitherImage')) {
$imagick = new Imagick();
$imagick->readImage($fichier);
$imagick->readImage(realpath($fichier));
if (!$color) {
$imagick->setImageType(Imagick::IMGTYPE_GRAYSCALE);
}
$imagick->orderedPosterizeImage($thmap.','.$levels);
if (method_exists('Imagick', 'orderedPosterizeImage')) {
$imagick->orderedPosterizeImage($thmap.','.$levels);
} else {
$imagick->OrderedDitherImage($thmap.','.$levels);
}
$imagick->setImageFormat('png');
$imagick->writeImage($dest);
// chemin compatible Windows
$destinationfile = realpath(dirname($dest)) . DIRECTORY_SEPARATOR . basename($dest);
$imagick->writeImage($destinationfile);
// Mais on renvoie quand même le chemin relatif initial
$retour = $dest;
} else {
// Renvoyer l'image originale si on n'a rien pu faire
$retour = $fichier;
}
} else {
$retour = $dest;
}
return _image_ecrire_tag($cache, array('src' => $retour));

@ -1,7 +1,7 @@
<paquet
prefix="fonctions_images"
categorie="multimedia"
version="0.7.5"
version="0.7.6"
etat="stable"
compatibilite="[3.0.0;4.1.*]"
logo="prive/themes/spip/images/fonctions_images-48.png"

Loading…
Cancel
Save