2017-09-18 6 views
0

J'essaie de lire et de sauvegarder un fichier tiff avec quelques balises supplémentaires, lorsque je crée une nouvelle image qui fonctionne bien, mais lorsque j'ouvre une image, j'essaie d'y écrire des balises méta ne fonctionne pas (L'image peut être écrite mais elle gardera l'étiquette originale sans aucun changement).Comment ajouter une balise supplémentaire pour le fichier tiff

J'ai joint mon code de test, je suis apprécié pour toute aide!

from PIL import Image, TiffImagePlugin 
def test_custom_metadata(): 

    img = Image.open('myimage.tif') 

    info = TiffImagePlugin.ImageFileDirectory() 
    CustomTagId = 37000 

    info[CustomTagId] = 6 
    info.tagtype[CustomTagId] = 3 # 'short' TYPE 

    Image.DEBUG=True 
    TiffImagePlugin.WRITE_LIBTIFF = False # Set to True to see it break. 
    img.save('./temp2.tiff', tiffinfo = info) 

test_custom_metadata() 
+0

Que signifie "ne fonctionne pas" signifie? Y a-t-il une erreur, si c'est le cas, ajoutez la pile au dossier. Ou l'image est-elle écrite mais vous ne pouvez pas voir votre tag tiff personnalisé? – Bernhard

+0

@Bernhard Je le dis clairement, merci! – MMzztx

+0

Votre code a couru sans erreur sur ma machine. –

Répondre

1

Les œuvres suivantes pour moi avec la version 2.3 d'oreiller:

from PIL import Image 

image_1 = Image.open('input.tiff') 
image_1.tag[37000] = 'my special tiff tag' 
image_1.save('output.tiff', tiffinfo=image_1.tag) 

image_2 = Image.open('output.tiff') 
print image_2.tag[37000] 

Cette imprime my special tiff tag lors de l'exécution d'un input.tiff dans le dossier en cours. Je comprends que cela ne fonctionne que si vous n'utilisez pas libtiff pour écrire le fichier. Lors de l'utilisation de libtiff, les balises personnalisées sont ignorées.

+0

Merci pour votre réponse! Après avoir changé mon oreiller de 4.1 à 2.3 cela fonctionne, il pourrait en raison du problème de version. – MMzztx

+0

Encore une chose, votre oreiller 2.3 img.save() fonctionne-t-il correctement? Lorsque je sauvegarde l'image, elle ne s'affiche pas correctement. img.show() est correct, mais après l'avoir enregistré, certains d'entre eux deviennent vides. Merci pour votre patience! Enregistrer sous '.png' fonctionne. Est-ce que 2.3 supporte '.tiff' ... – MMzztx

+0

Je pense que la différence est que 2.3 utilise par défaut son propre éditeur TIFF et avec une version plus récente, la valeur par défaut est d'utiliser libtiff dans les coulisses. Dans une version plus récente, vous devriez pouvoir écrire en libtiff, comme dans votre exemple avec 'TiffImagePlugin.WRITE_LIBTIFF = False'. Le problème avec le fichier TIFF enregistré est probablement dû à certaines fonctionnalités non prises en charge dans l'implémentation de l'éditeur PIL TIFF au moins dans l'ancienne version. – Bernhard