Peut-on changer la taille d'une image JPEG avec décodage et redéfinition?

Je veux convertir une image JPEG 640×480 en 320×240. Je sais que cela peut se faire en décodant l'image JPEG en YCbCr brut, l'étaler et le coder en JPEG. Mais est-il possible avec l'encodage JPEG pour modéliser directement l'image sans décodage?

Vous pouvez, mais seulement si votre visionneuse JPEG prend en charge l'extension JPEG SmartScale . Jpegtran peut le faire pour les tailles de N / 8, avec N = 1..16. Fondamentalement, la taille du bloc DCT passe de 8×8 à autre chose pendant la recompression (p. Ex. 4×4), ce qui réduit efficacement l'image.

Remarque: SmartScale a été introduit dans la version 8 de la bibliothèque libjpeg, mais ce n'est pas largement pris en charge par les téléspectateurs.

Un document décrivant les changements en détail peut être trouvé ici: Evolution de JPEG .

EDIT: Il semble que la plupart des téléspectateurs ne puissent pas afficher ces images car elles sont basées sur libjpeg-turbo. Et libjpeg-turbo a choisi de ne pas implémenter cette fonctionnalité . En fait, j'ai essayé quelques programmes (sur Ubuntu 14.04 et Windows 8) et aucun n'a pu afficher l'image réduite créée à l'aide de jpegtrans. Même Photoshop, IrfanView et GIMP ont échoué.

EDIT 2: En fait, Ubuntu et Fedora n'enregistrent même pas la bibliothèque libjpeg8, mais remplacez-la complètement par la version libjpeg-turbo. Ainsi, aucun des programmes ne pourra lire les fichiers JPEG SmartScale, sauf pour quelques binaires liés de manière statique à la bibliothèque originale libjpeg8.

La réponse courte est non. Une image JPEG utilise la compression, ce qui signifie que chaque octet de sortie dépend de tous les autres. Si vous modifiez le nombre d'octets d'image, vous devez alors décompresser et recomprimer.

Il y aura une perte de qualité à la suite de la recompression, puisque JPEG utilise une compression à perte, mais vous perdez toujours la qualité en réduisant la résolution. Vous pouvez obtenir la meilleure qualité possible à partir de l'image basse résolution en augmentant le niveau de qualité JPEG lors de la recompilation, bien que cela augmente bien la taille du fichier.

Si vous faites beaucoup de travail avec des images, il est préférable de travailler dans un format de compression sans perte, tel que PNG, la conversion en JPEG uniquement lorsque les images sont finalisées, pourvu que vous disposiez de l'espace disque supplémentaire.