|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
TRANSFORMATION : IMAGE => ASCII ART
Information sur la source
Description
Ce code transforme l'image "img.jpg" en asciiart, la couleur de fond sur chaque caractère est la couleur moyenne du carré encodé, et le caractère est celui qui présente le plus fort contraste...
Source
- <?php
- function decompose($a){
- $b=(int)$a/256/256;
- $v=(int)$a/256%256;
- $r=(int)$a%256;
- return array($r, $v, $b);
- }
- function recompose($r, $v, $b){
- return (($b*256+$v)*256+$r);
- }
- function colorfor($a, $x, $y, $nx, $ny, $alphabet){
- $alphabetcouleursN=array();
- $alphabetcouleursR=array();
- $alphabetcouleursV=array();
- $alphabetcouleursB=array();
- $rm=0;
- $vm=0;
- $bm=0;
- $n=0;
- foreach($alphabet as $k=>$img){
- $alphabetcouleursR[$k]=0;
- $alphabetcouleursV[$k]=0;
- $alphabetcouleursB[$k]=0;
- $alphabetcouleursN[$k]=0;
- }
- for ($i=$x*$nx;$i<($x+1)*$nx;$i++){
- for ($j=$y*$ny;$j<($y+1)*$ny;$j++){
- list($r, $v, $b)=decompose(imagecolorat($a, $i,$j));
- $rm+=$r;
- $vm+=$v;
- $bm+=$b;
- $n++;
- $px=$i-$x*$nx;
- $py=$j-$y*$ny;
- foreach($alphabet as $k=>$img){
- if (!imagecolorat($img, $px, $py)){
- $alphabetcouleursR[$k]+=$r;
- $alphabetcouleursV[$k]+=$v;
- $alphabetcouleursB[$k]+=$b;
- $alphabetcouleursN[$k]++;
- }
- }
- }
- }
- $rm=intval($rm/$n);
- $vm=intval($vm/$n);
- $bm=intval($bm/$n);
- $car=-1;
- $diff=0;
- for($k=0;$k<sizeof($alphabet);$k++){
- $alphabetcouleursR[$k]=intval($alphabetcouleursR[$k]/$alphabetcouleursN[$k]);
- $alphabetcouleursV[$k]=intval($alphabetcouleursV[$k]/$alphabetcouleursN[$k]);
- $alphabetcouleursB[$k]=intval($alphabetcouleursB[$k]/$alphabetcouleursN[$k]);
- $d=abs($alphabetcouleursR[$k]-$rm)+
- abs($alphabetcouleursV[$k]-$vm)+
- abs($alphabetcouleursB[$k]-$bm);
- if ($d>=$diff){
- $diff=$d;
- $car=$k;
- }
- }
- $c1=recompose($rm, $vm, $bm);
- $c2=recompose($alphabetcouleursR[$car], $alphabetcouleursV[$car], $alphabetcouleursB[$car]);
- return array($c1, $c2, $car);
- }
-
- function tohex($a){
- $hex='0123456789ABCDEF';
- $C=$a%16;
- $B=($a-$C)/16;
- return ($hex{$B}.$hex{$C});
- }
-
- function color($a){
- list($r, $v, $b)=decompose($a);
- return '#'.tohex($b).tohex($v).tohex($r);
- }
-
- set_time_limit(0);
-
- $npx=8;
- $npy=15;
-
-
- $alphabet=array();
- //ici, si vous voulez plus de caractères possibles, il faut augmenter le nombre de caractères...
- $alphabetstr='abcdefABCDEF0123456789-|`\_#"~@?,.;/:§!%*$&';
- for ($i=0;$i<strlen($alphabetstr);$i++){
- $alphabet[$i]=ImageCreateTrueColor($npx,$npy);
- $back = ImageColorAllocate ($alphabet[$i], 200, 200, 200);
- $for = ImageColorAllocate ($alphabet[$i], 0, 0, 0);
- ImageFilledRectangle($alphabet[$i],0, 0,$npx, $npy,$back);
- imagechar($alphabet[$i], 12, 0,0, $alphabetstr[$i],$for);
- }
-
- $a=ImageCreateFromJpeg('img.jpg');
- $x=imagesX($a);
- $y=imagesY($a);
-
- $ncx=60;
- $ncy=(int)$y*$ncx/$x*$npx/$npy;
-
- $ny=$ncy*$npy;
- $nx=$ncx*$npx;
- $b=ImageCreateTrueColor($nx,$ny);
- ImageCopyResized($b,$a,0,0,0,0,$nx,$ny,$x,$y);
- imagedestroy($a);
-
-
- echo '<table>';
- for ($y=0;$y<$ncy-1;$y++){
- echo '<tr>';
- for ($x=0;$x<$ncx-1;$x++){
- list($c1, $c2, $c3)=colorfor($b, $x, $y, $npx, $npy, $alphabet);
- echo '<td style="background-color:'.color($c1).';color:'.color($c2).'">'.$alphabetstr{$c3}.'</td>';
- flush();
- }
- echo '</tr>';
- }
- echo '</table>';
- imagedestroy($b);
- ?>
<?php
function decompose($a){
$b=(int)$a/256/256;
$v=(int)$a/256%256;
$r=(int)$a%256;
return array($r, $v, $b);
}
function recompose($r, $v, $b){
return (($b*256+$v)*256+$r);
}
function colorfor($a, $x, $y, $nx, $ny, $alphabet){
$alphabetcouleursN=array();
$alphabetcouleursR=array();
$alphabetcouleursV=array();
$alphabetcouleursB=array();
$rm=0;
$vm=0;
$bm=0;
$n=0;
foreach($alphabet as $k=>$img){
$alphabetcouleursR[$k]=0;
$alphabetcouleursV[$k]=0;
$alphabetcouleursB[$k]=0;
$alphabetcouleursN[$k]=0;
}
for ($i=$x*$nx;$i<($x+1)*$nx;$i++){
for ($j=$y*$ny;$j<($y+1)*$ny;$j++){
list($r, $v, $b)=decompose(imagecolorat($a, $i,$j));
$rm+=$r;
$vm+=$v;
$bm+=$b;
$n++;
$px=$i-$x*$nx;
$py=$j-$y*$ny;
foreach($alphabet as $k=>$img){
if (!imagecolorat($img, $px, $py)){
$alphabetcouleursR[$k]+=$r;
$alphabetcouleursV[$k]+=$v;
$alphabetcouleursB[$k]+=$b;
$alphabetcouleursN[$k]++;
}
}
}
}
$rm=intval($rm/$n);
$vm=intval($vm/$n);
$bm=intval($bm/$n);
$car=-1;
$diff=0;
for($k=0;$k<sizeof($alphabet);$k++){
$alphabetcouleursR[$k]=intval($alphabetcouleursR[$k]/$alphabetcouleursN[$k]);
$alphabetcouleursV[$k]=intval($alphabetcouleursV[$k]/$alphabetcouleursN[$k]);
$alphabetcouleursB[$k]=intval($alphabetcouleursB[$k]/$alphabetcouleursN[$k]);
$d=abs($alphabetcouleursR[$k]-$rm)+
abs($alphabetcouleursV[$k]-$vm)+
abs($alphabetcouleursB[$k]-$bm);
if ($d>=$diff){
$diff=$d;
$car=$k;
}
}
$c1=recompose($rm, $vm, $bm);
$c2=recompose($alphabetcouleursR[$car], $alphabetcouleursV[$car], $alphabetcouleursB[$car]);
return array($c1, $c2, $car);
}
function tohex($a){
$hex='0123456789ABCDEF';
$C=$a%16;
$B=($a-$C)/16;
return ($hex{$B}.$hex{$C});
}
function color($a){
list($r, $v, $b)=decompose($a);
return '#'.tohex($b).tohex($v).tohex($r);
}
set_time_limit(0);
$npx=8;
$npy=15;
$alphabet=array();
//ici, si vous voulez plus de caractères possibles, il faut augmenter le nombre de caractères...
$alphabetstr='abcdefABCDEF0123456789-|`\_#"~@?,.;/:§!%*$&';
for ($i=0;$i<strlen($alphabetstr);$i++){
$alphabet[$i]=ImageCreateTrueColor($npx,$npy);
$back = ImageColorAllocate ($alphabet[$i], 200, 200, 200);
$for = ImageColorAllocate ($alphabet[$i], 0, 0, 0);
ImageFilledRectangle($alphabet[$i],0, 0,$npx, $npy,$back);
imagechar($alphabet[$i], 12, 0,0, $alphabetstr[$i],$for);
}
$a=ImageCreateFromJpeg('img.jpg');
$x=imagesX($a);
$y=imagesY($a);
$ncx=60;
$ncy=(int)$y*$ncx/$x*$npx/$npy;
$ny=$ncy*$npy;
$nx=$ncx*$npx;
$b=ImageCreateTrueColor($nx,$ny);
ImageCopyResized($b,$a,0,0,0,0,$nx,$ny,$x,$y);
imagedestroy($a);
echo '<table>';
for ($y=0;$y<$ncy-1;$y++){
echo '<tr>';
for ($x=0;$x<$ncx-1;$x++){
list($c1, $c2, $c3)=colorfor($b, $x, $y, $npx, $npy, $alphabet);
echo '<td style="background-color:'.color($c1).';color:'.color($c2).'">'.$alphabetstr{$c3}.'</td>';
flush();
}
echo '</tr>';
}
echo '</table>';
imagedestroy($b);
?>
Fichier Zip
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
Télécharger le zip
Sources du même auteur
Sources de la même categorie
Sources en rapport avec celle ci
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Conversion image en couleurs données [ par matique ]
Bonjour, Je souaiterais convertir une image en restreignant sa palette de couleurs à une palette de couleurs que j'ai definit. Par exemple : j'ai un
Transformation de Ascii en caractère [ par Noizet ]
Hello,Est-ce qu'il existe une fonction qui transforme mon code ascii en caractère?Merci"NoiZet"
faire mesure sur image [ par alex7887 ]
bonjour.j'ai un probleme je dois crée un module en php,qui doit permettre de faire des mesures de distance et angle sur une image GIF.auriez vous une
Retour a la ligne et écriture [ par DjChat ]
bonjour a tous, j'ai fait un script d'upload d'image et j'ai besoin qu'une fois qu'elle est uploder il m'ecrive dans un fichier texte images/le nom de
Afficher une bourdure autour d'une zonnemap (image cliquable) [ par CoinCoin39FRFedora ]
Le canard linuxien , ex-windosien se faisant massacrer sur Urban Terror sous le pseudonyme CoinCoin39[FR]Fedora
Probleme de caractere dans BDD [ par DjChat ]
Bonjour a tous j'ai crée un formulaire qui a des champ texte et qui une fois validée sont stocker dans une base de donnée MySQL, mais dès qu'il y a de
écrire sur une image [ par slashf ]
salut à mon problème est le suivant: je veux écrire sur une image un code qui serra généré en php pour cela y'a pas de souci j'ai bidouillé un program
2 questions qui pour moi sont un probleme [ par toutais ]
bonjourvoici mes deux questions : Je tiens à preciser que je suis un débutant ,je connais un peu le html et c est tout. Je suis pret à apprendre d au
Recuperer valeur d'un input image... [ par DjChat ]
Bonjour a tous, je suis entrain de crée un formulaire avec des images clickable, j'aurai voulu recuperé le nom de la personne a qui est la photo, donc
Longueur de caractere dans un textarea [ par DjChat ]
Bonjour a tous, j'ai un formulaire avec deux textarea et j'aimerai limiter le nombre de caractere a taper dans ces champ, j'me suis renseigner et c'es
|
Téléchargements
Logiciels à télécharger sur le même thème :
Comparez les prix Nouvelle version
|