8
votes

À Python Pil, comment puis-je changer la qualité d'une image?

Je veux dégrader la qualité de l'image à quelques kilo-octets. Quelle est la meilleure façon de faire cela?

Merci!


0 commentaires

4 Réponses :


1
votes

résolu.

J'ai fait .... xxx


1 commentaires

Qualité est uniquement destiné à JPEG, il est ignoré pour un autre format.



1
votes

a) Modifier la taille: image.Resize.Resize (taille, filtre) b) le convertir explicitement en jpeg (si ce n'est pas) et définir la qualité souhaitée. c) utiliser une combinaison de a) et b)

Quoi que vous fassiez, il existe un compromis entre la taille et la qualité.


0 commentaires

12
votes

Si le format d'image est JPEG, voici un exemple: xxx

Les références que vous devez lire sont les suivantes:

  • [Le module d'image] [1], en particulier la fonction "Enregistrer", ce qui vous permet de transmettre des options pertinentes pour chaque format d'image.
    • Les options de chaque format d'image se trouvent dans une page différente, vous pouvez le trouver dans les documents.

7 commentaires

PNG accepte un drapeau "optimiser". Vous devez vérifier que les documents de chaque format d'image individuel pour déterminer les indicateurs d'optimisation que vous pouvez utiliser.


FWIW, l'OP n'est pas grand sur la lecture de la documentation - il a obtenu s.o.


@MARTINEAU AUSSI FWIW, je trouve la documentation PIL Associety. Imx, vous ne pouvez pas vraiment simplement pirater avec dir / Aide / doc et obtenir des réponses aussi souvent que vous le souhaitez. De plus, par exemple, remplacer png avec jpg dans le lien d'asymptote donne un 404.


@Karl Knechtel: Ce n'est peut-être pas la plus grande documentation, mais la réponse à cette question est dedans. Pour im.save () il dit "Les options de mots-clés peuvent être utilisées pour fournir des instructions supplémentaires à l'auteur. Si un écrivain ne reconnaît pas une option, il est ignoré silencieusement. Les options disponibles sont décrites plus tard. Dans ce manuel ". Si vous regardez ensuite dans l'annexe JPEG, il est indiqué "La méthode de sauvegarde prend en charge les options suivantes: Qualité - La qualité de l'image, sur une échelle de 1 (meilleur) à 95 (meilleur). La valeur par défaut est 75. Les valeurs supérieures à 95 doivent être évitées. ; 100 désactive complètement la phase de quantification JPEG ".


@Karl Knechtel: Voici un lien pour le PNG Annexe dans le manuel en ligne.


@ASIM IHSAN COMPRESSION de cette manière. L'image perds les données d'orientation .. et la photo à l'heure est enregistrée inversée / retournée, etc. ... Comment garder les données Exif?


@Vijaysharganer Je peux confirmer que l'utilisation de PIL de cette manière ne conserve pas les métadonnées EXIF. Vous pouvez utiliser un autre module Python comme pyexiv2 pour copier manuellement sur l'exsi après avoir créé le nouveau fichier. Pour plus d'informations, voir: Stackoverflow.com/Questtions/17042602/...



0
votes

Cela a fonctionné pour moi pour utiliser une boucle pour redimensionner des images à l'aide de PIL. Les produits variables sont une liste qui contenait tous les noms de produits, mais vous pouvez également utiliser des readlines () pour chaque ligne dans un fichier pour le faire:

def resize_images(self):
    products = PRODUCTS
    for name in products:
        try:
            fp = open(filename + name + ".jpg", "rb")
            img = Image.open(fp)
            img.load()
            img.save(filename + name + "_2" + ".jpg", quality=23)
            fp.close()
        except:
            print name 


0 commentaires