2017-10-09 1 views
1

Y at-il de toute manière de convertir une image RVB en une image CMJN en utilisant ICC dans une liaison python ImageMagick. Je sais que vous pouvez facilement le faire dans la ligne de commande, mais est-il possible de le faire dans une liaison comme Wand (de préférence Wand)? Ce que j'ai maintenant:ImageMagick - Convertir l'image RVB en CMYK en utilisant ICC en Python

from wand.image import Image 
from urllib.request import urlopen 
response = urlopen('https://www.website.com/path/to/image.jpg') 
try: 
    with Image(file=response) as img: 
     img.type = 'truecolor' 
     img.alpha_channel = True 
     img = img.colorspace = 'cmyk' 
     img.save(filename='converted.jpg') 
finally: 
    response.close() 

résulte dans l'image ayant HORRIÈRE des couleurs inexactes, mais dans l'espace de couleur correct. De toute façon à convertir en utilisant un profil? Merci.

+0

Je ne suis pas un expert sur Baguette, mais je ne vois rien sur les profils dans la documentation Baguette à https://media.readthedocs.org/pdf/wand/latest/ baguette.pdf. Mais je suppose que vous pourriez faire un appel de sous-processus à Imagemagick convertir directement en Python. Voir par exemple: https://stackoverflow.com/questions/40281613/call-imagemagicks-convert-command-in-python-script. Cependant, la commande de conversion peut nécessiter un ou deux profils selon que l'image d'entrée a un profil CMJN ou non. – fmw42

+0

Je connais peu de choses sur Python, mais activer Alpha pour un JPG (qui ne supporte pas la transparence) me semble faux. Aussi 'img = img.colorspace = 'cmyk' semble tordu. Peut-être que vous utilisez l'alpha en noir? –

+0

Vous pouvez également utiliser un appel de sous-processus en utilisant EXIFTOOL pour ajouter un profil. Voir, par exemple, https://stackoverflow.com/questions/6740441/how-to-set-a-color-profile-with-exiftool – fmw42

Répondre

0

Essayez d'utiliser wand.image.Image.transform_colorspace

with Image(file=response) as img: 
    img.transform_colorspace('cmyk') 
    img.save(filename='converted.jpg') 
+0

Cela donne essentiellement le même résultat que 'img.colorspace = 'cmyk' '. Il ne convertit pas en utilisant un profil ICC, ce que je recherche. – pepper5319