Comment puis-je convertir n'importe quelle image pour un 4-couleur de la palette de l'image à l'aide de la Bibliothèque Python Imaging library?
J'ai un appareil qui prend en charge 4-graphiques en couleur (un peu comme la CGA dans les vieux jours).
Je voulais utiliser PIL à la lecture de l'image et de le convertir à l'aide de mon 4-une palette de couleurs (rouge, vert, jaune, noir), mais je ne peux pas savoir si c'est encore possible. J'ai trouvé quelques archives de liste de diffusion des postes qui semblent suggérer d'autres personnes ont essayé et échoué.
Un simple exemple python serait bien apprécié!
Des points de Bonus si vous ajoutez quelque chose qui convertit l'image d'une chaîne d'octets, où chaque octet représente que 4 pixels de données (chaque deux bits représentant une couleur de 0 à 3)
- Vous essayez de faire les quantification de l'image. Il y a ici quelques conseils pour ce genre de chose ici: web.archive.org/web/20080825200550/http://nadiana.com/...
Vous devez vous connecter pour publier un commentaire.
Première: votre quatre palette de couleurs (noir, vert, rouge, jaune) a pas composante bleue. Donc, vous devez accepter que votre image de sortie sera à peine approximative de l'image d'entrée, à moins qu'il n'existe pas de composante bleue pour commencer.
Essayez ce code:
Cela crée un PNG de la palette de l'image avec seulement les quatre premières entrées de palette définie à vos couleurs. Cette image de l'échantillon:
devient
Il est trivial de prendre la sortie de
image2cga
(rendements, une séquence de 0 à 3 valeurs) et le pack de tous les quatre valeurs à un octet.Si vous avez besoin d'aide à propos de ce que fait le code, veuillez demander et je vais vous expliquer.
EDIT1: Ne pas réinventer la roue
Bien sûr, il s'avère que j'étais trop enthousiaste et que Thomas a découvert l'Image.de quantification de la méthode peut prendre une palette de l'image comme argument et faire de la quantification avec de bien meilleurs résultats que ma méthode ad hoc ci-dessus:
EDIT1, cont: Pack les pixels en octets
Pour "valeur ajoutée", voici un code pour produire la chaîne compactée (4 pixels par octet):
John, j'ai trouvé que le premier lien, mais il n'a pas directement m'aider avec le problème. Il m'a fait regarder plus profondément dans quantifier bien.
Je suis venu avec cette hier avant d'aller au lit:
TZ.TZIOY, votre solution semble fonctionner sur les mêmes principes. Bravo, j'aurais arrêté de travailler sur elle et attendit pour votre réponse. Le mien est un peu plus simple, bien que certainement pas plus logique que la vôtre. PIL est lourd à utiliser. La vôtre explique ce qu'il se passe de le faire.
Pour ceux qui veulent PAS de tramage pour obtenir des aplats de couleurs. je modded: Convertir une image spécifique de la palette à l'aide de PIL sans tramage
avec les deux solutions dans ce fil. Même si ce fil est vieux, certains d'entre nous veulent que de l'information. Kudios