Nouvelles:

Bienvenue au Forum de discussion Électro-Bidouilleur! Inscrivez-vous pour participer aux discussions!: 
https://forum.bidouilleur.ca/index.php?action=signup Les demandes d'inscription sont révisées quotidiennement.

Menu principal

Conversion d'images bitmap vers une sérigraphie KiCad

Démarré par sylvainmahe, Novembre 28, 2020, 09:02:17 AM

« précédent - suivant »

sylvainmahe

Bonjour à  vous :)

CitationCe que je souhaite partager avec vous : Conversion d'images bitmap vers une sérigraphie KiCad via une routine bash (.sh)

Avec cette routine de conversion d'images (pour le système d'exploitation Linux), vous allez pouvoir importer des logos (et autres graphismes) dans vos dessins KiCad en vue PCB sur le calque de sérigraphie de la face avant (F.SilkS).

Il existe un outil par défaut dans cette suite KiCad nommé Bitmap2Component qui est censé remplir cette fonction, mais notamment dépendant de la résolution (hauteur/largeur) de l'image d'origine, il ne permet pas le redimensionnement, est basé sur un principe de conversion vectorielle qui détruit l'information, et au final fait apparaître pour certains dessins de petites tailles des lignes courbes là  où il y a des droites parfaites, et plus une bouillie de pixels qu'une sérigraphie de qualité...

Ainsi cet outil proposé par défaut est pour moi inutilisable lorsque l'on souhaite un rendu exact par rapport à  notre image noir et blanc initiale.

À l'instar de Bitmap2Component, ma routine d'automatisation prend en entrée une image qui doit être initialement en noir et blanc (monochrome) afin que les pixels blancs soient utilisés dans le traitement :

CitationCe que je vous propose ici permettra qu'un pixel blanc dans votre image d'origine sera très exactement un carré de sérigraphie (de la taille souhaitée) dans votre dessin en vue PCB.

Ci-dessous, la routine (.sh) permettant la conversion d'images bitmap (.bmp) vers KiCad (.mod) :

#!/bin/bash

echo "Pixel size in mil ?"
read sizeRaw

clear

rm tmp -r -f
mkdir tmp

size=$(echo $sizeRaw"*10" | bc -l)

for file in *.bmp
do
if [ -f "$file" ]
then
echo $file" to "${file%%.*}.mod

convert "$file" tmp/tmp.txt

grep "white" tmp/tmp.txt > tmp/tmp
grep -o ".*:" tmp/tmp > tmp/tmpxy
grep -o ".*," tmp/tmpxy > tmp/x
sed -i tmp/x -e "s/,//"
grep -o ",.*:" tmp/tmpxy > tmp/y
sed -i tmp/y -e "s/,//" -e "s/://"

countList=0

while read x
do
xList[countList]=$(echo $x"*"$size | bc -l)
((countList++))
done < tmp/x

countList=0

while read y
do
yList[countList]=$(echo $y"*"$size | bc -l)
((countList++))
done < tmp/y

echo "PCBNEW-LibModule-V1" > tmp/tmp.mod
echo "\$INDEX" >> tmp/tmp.mod
echo ${file%%.*} >> tmp/tmp.mod
echo "\$EndINDEX" >> tmp/tmp.mod
echo "\$MODULE "${file%%.*} >> tmp/tmp.mod
echo "Li "${file%%.*} >> tmp/tmp.mod

for ((iterationList=0; iterationList < countList; iterationList++))
do
echo "DP 0 0 0 0 4 0 200" >> tmp/tmp.mod
echo "Dl "${xList[iterationList]}" "${yList[iterationList]} >> tmp/tmp.mod
echo "Dl "$(echo ${xList[iterationList]}"+"$size | bc -l)" "${yList[iterationList]} >> tmp/tmp.mod
echo "Dl "$(echo ${xList[iterationList]}"+"$size | bc -l)" "$(echo ${yList[iterationList]}"+"$size | bc -l) >> tmp/tmp.mod
echo "Dl "${xList[iterationList]}" "$(echo ${yList[iterationList]}"+"$size | bc -l) >> tmp/tmp.mod
done

echo "\$EndMODULE "${file%%.*} >> tmp/tmp.mod
echo "\$EndLIBRARY" >> tmp/tmp.mod

mv tmp/tmp.mod "${file%%.*}".mod
fi
done

rm tmp -r -f

exit 0


La routine présentée ci-dessus utilise le programme (ou paquet) imagemagick pour extraire les valeurs matricielles des images traitées.

Il vous faut donc l'installer à  l'aide de la ligne de commande suivante (à  écrire dans le terminal de Linux) :

sudo apt-get install imagemagick -y

Une fois cette installation effectuée, lorsque vous exécutez la routine (.sh) se propose à  vous une question "Pixel size in mil ?", il vous faut alors renseigner la taille souhaitée en millième de pouce que fera un pixel dans votre dessin KiCad (cohérent lorsque les unités de mesures sont indiquées en pouces et non pas en millimètres) :

Par exemple si vous indiquez en taille de pixel le nombre 25, avec une grille dans votre dessin KiCad réglée sur 25 (et des unités de mesures en pouces) vous verrez que le pas des pixels de votre graphisme en vue PCB fera très exactement le même pas que la grille.

Après avoir validé le choix de la taille des pixels, toutes les images ayant l'extension .bmp (bitmap) dans le répertoire courant sont converties successivement en fichiers .mod (footprint) que vous pouvez ajouter à  vos projets KiCad par l'intermédiaire du menu d'ajout de bibliothèques (Preferences > Library) en vue PCB.

Si vous apercevez le crénelage des pixels de votre graphisme sérigraphié une fois votre circuit réalisé, je vous conseille d'utiliser une image bitmap (.bmp) initiale de plus grande résolution, et d'indiquer une taille de pixel (lors de la conversion avec la routine) d'autant plus faible, par exemple 2.5 (attention cependant, les temps de traitement peuvent s'avérer assez longs avec des résolutions d'images trop grandes).

Libre à  vous de faire une utilisation de ce petit programme de conversion d'image, qui vous permettra aisément d'apposer vos logos et divers graphismes sur vos circuits imprimés avec une parfaite exactitude de conversion (1 pixel bitmap vers 1 pixel sérigraphié).

Ci-dessous un exemple de code matriciel (QR Code) sérigraphié avec mon outil :