2010-07-07 13 views
2

Je veux convertir l'image PNG 24 bits en entrée en 8 bits, j'ai essayé d'utiliser Imagemagick et Python PIL, ni l'un ni l'autre.conversion png24 en png8

par exemple:

à Imagemagick J'essaie de convertir la commande de la console en tant que telle:

convert -depth 8 png24image.png png8image.png 

Et voici la façon dont j'ai essayé avec python:

import Image 
def convert_8bit(src, dest): 
    """ 
    convert_8bit: String, String -> void. 
    Converts the input image file into 8bit depth. 
    """ 
    im = Image.open(src) 
    if not im.mode == "P": 
     im2 = im.convert("P", rgb2xyz) 
     im2.save(dest) 

Imagemagick n'a même pas touchez l'image tandis que la fonction python réduit à 8bit mais conserve le nombre de chiffres uniques au lieu de 256. Photoshop utilisé pour convertir l'image en 8bit avec 256 numéros converti en png8 à partir d'une image png 24 bits.

Merci

EDIT:

sortie de 24-> 8 conversion de .png via Photoshop (dont j'ai besoin) alt text http://img695.imageshack.us/img695/934/psout.png

convertis par ma fonction Python

alt text http://img638.imageshack.us/img638/6762/pythonout.png

+0

Que voulez-vous dire par « ne touche même pas l'image » exactement? Est-ce que 'png8image.png' n'est pas créé du tout? –

+0

créé mais n'ayant aucune différence (juste la même copie avec un autre nom) – Hellnar

+0

* Bonjour je veux convertir l'image PNG 24 bits en entrée en 8 bits, j'ai essayé via Imagemagick et Python PIL mais ne fonctionne pas. * Devrait être * Je veux pour convertir l'image PNG 24 bits en entrée en 8 bits. J'ai essayé d'utiliser Imagemagick et Python PIL, mais aucun ne fonctionne. * – mcandre

Répondre

3

Il ressemble à la méthode de quantification sur la méthode convert ne fait pas la bonne chose. Essayez ceci:

im2 = im.convert('RGB').convert('P', palette=Image.ADAPTIVE) 

La conversion supplémentaire en RGB peut être redondante. J'ai obtenu ce conseil de http://nadiana.com/pil-tips-converting-png-gif

+0

J'ai l'impression que sans le paramètre 'palette = Image.ADAPTIVE', PIL n'utilise que des couleurs" web-safe ". – tzot

+0

@ ΤΖΩΤΖΙΟΥ, oui je pense que j'ai vu ça dans la documentation quelque part.Il n'y a plus aucune raison d'utiliser des couleurs Web-safe - c'était à une époque où les cartes graphiques étaient beaucoup moins capables. Il en résulte une image qui a l'air mauvaise et est moins compressible aussi! –

0

Je fais comme ça (en utilisant Imagick en PHP):

$colors = min(255, $im->getImageColors()); 
$im->quantizeImage($colors, Imagick::COLORSPACE_RGB, 0, false, false); 
$im->setImageDepth(8 /* bits */); 
+0

J'utilise python et j'ai des connaissances php très limitées donc la version de la commande convert serait adorable :) – Hellnar