Bien que la réponse de Philip soit la meilleure voie à suivre, il est possible de faire ce que vous voulez entièrement dans le domaine du JPEG.
JPEG fonctionne en décomposant votre image en blocs appelés unités de codage minimum (MCU), généralement 16 × 16 chacune, et en les compressant séparément. Vous pouvez le voir dans les images lorsque vous augmentez le niveau de compression très haut. À des niveaux de compression plus raisonnables, les blocs se mélangent si bien que vous ne voyez jamais les bordures.
Nous pouvons profiter de ce fait pour ajouter sans perte une simple bordure blanche à une image. Nous devons simplement créer un tableau creux de blocs blancs égal à la taille de l'image de sortie, puis déposer les blocs JPEG MCU d'origine au milieu.¹
Il y a un inconvénient à cette technique: elle ne fonctionne que lorsque les tailles d'image d'entrée et de sortie sont toutes deux un multiple pair de la taille du MCU. Lorsque ce n'est pas le cas, nous devons recompresser certains des blocs à la marge entre la bordure blanche et les bords de l'image d'origine. Vous ne verrez pas cette différence dans la sortie si vous restez à l' écart des niveaux de compression JPEG trop élevé, donc il est encore efficace sans perte.
Je ne connais aucun programme qui ne fait que cela. La chose la plus proche que je sache est quelque chose qui fait l'opération inverse: jpegtran a une fonction de recadrage qui coupe sans perte les parties des bords de l'image. le milieu intact.
La solution prête à l'emploi la plus simple que je connaisse est le plugin Better JPEG Lossless Resave pour Photoshop. Il utilise des techniques basées sur les idées données ci-dessus pour copier des MCU à partir de l'image d'origine partout où cela est possible, afin d'éviter de les recréer à partir de la version non compressée, comme le fait normalement Photoshop.³
Digressions:
Vous pourriez penser que la bordure résultante ne sera pas tout à fait blanche , car la perte de JPEG créera une sorte de différence de couleur dans la sortie. J'ai fait quelques tests, et dans Photoshop au moins, une image purement blanche enregistrée via le niveau JPEG de Save For Web 10 (c'est-à-dire de qualité "faible") donne une image décodée qui est toujours purement blanche.
J'ai déterminé cela avec deux tests:
Tout d'abord, j'ai chargé le JPEG en tant que calque au-dessus de l'original, défini le mode de fusion du calque supérieur sur Différence, puis ajouté un calque de réglage des niveaux au-dessus pour essayer d'agrandir les différences. L'image résultante est restée noire, indiquant «aucune différence».
Deuxièmement, lorsque je n'ai pas vu les différences attendues, j'ai laissé tomber le calque de réglage et remis le calque JPEG en mode de fusion Normal, j'ai pris l'outil pipette et j'ai cherché sur toute l'image un pixel qui n'apparaissait pas en RVB (255,255,255 ) dans le panneau Info. Je n'en ai jamais trouvé. Je m'attendais à voir les chiffres scintiller un peu pendant que je parcourais l'image, mais ils sont restés stables.
Je peux seulement conclure qu'il s'agit d'un cas dégénéré de l'algorithme de codage: les blocs blancs purs restent blancs pendant la transformée en cosinus discrète .
Fait intéressant, cela ne se produit pas avec des blocs noirs purs. Au moins avec l'implémentation de Photoshop, ils se transforment en RVB (1,1,1) lorsqu'ils sont décodés, pas RVB (0,0,0).
En fin de compte, vous n'avez pas à vous soucier des points pulvérisés dans cette zone de bordure lors de l'impression d'une image produite à l'aide de la technique ci-dessus.
jpegtran
est un programme en ligne de commande, mais il existe également un programme GUI Windows basé sur le même code appelé jpegcrop
.
Hélas, ce plugin est uniquement Windows.
jpegtran
la fonction de recadrage peut également être utilisée pour s'étendre. (Je ne sais pas de quelle couleur les bordures étendues finissent, cependant.)jpegtran
peut également étendre l'image, mais il remplit toujours avec un gris moyen codé en dur, RVB (128,128,128). Il le fait simplement parce que c'est la seule option facile, car dans l'espace des coefficients DCT, vous pouvez le faire avec un simplebzero()
appel. J'ai essayé un hack sauvage pour changer cela , ce qui ne fonctionne pas, mais devrait vous donner une idée de la laideur impliquée. lève les mains de frustrationLe point à retenir ici est que vous perdez de la qualité lors de l' enregistrement de la photo dans un format de compression avec perte. Tant que vous enregistrez la photo dans un format sans perte (PSD, TIFF, etc.) après avoir ajouté la bordure, vous ne perdrez pas plus de données que vous n'en avez déjà perdues en enregistrant la photo au format JPEG en premier lieu.
la source
Ce n'est pas tout à fait sans perte, mais vous pouvez vous rapprocher assez en utilisant GIMP (ou un autre éditeur avec une fonctionnalité similaire) et les deux astuces suivantes:
Tout d'abord, assurez-vous que la bordure que vous ajoutez est un multiple de 8 pixels de large (et de préférence un multiple de 16 pixels).
Ceci est important car l'algorithme de compression JPEG divise l'image en blocs de 8 × 8 pixels *, en partant du coin supérieur gauche, et applique l'algorithme de compression avec perte indépendamment à chaque bloc. Ainsi, au moins en principe, vous pouvez remplir sans perte une image JPEG en ajoutant des blocs de 8 × 8 pixels complets autour des blocs existants. Si, toutefois, vous tentiez d'ajouter une bordure qui n'était pas un nombre entier de blocs de large, les blocs de l'image rembourrée ne seraient pas alignés avec ceux de l'original et une perte de compression serait inévitable.
*) En fait, la plupart des images JPEG utilisent un sous - échantillonnage de chrominance , ce qui signifie que seule la partie en niveaux de gris de l'image est réellement compressée en blocs de 8 × 8, tandis que les canaux de chrominance sont réduits de 50% avant la compression, ce qui rend leur taille de bloc effective 16 × 16 pixels. Ainsi, pour de meilleurs résultats, la largeur de votre bordure doit vraiment être un multiple de 16 pixels. Cependant, vous pouvez généralement vous en sortir avec une bordure de 8 (ou 24 ou 40 etc.), car un peu de perte de compression dans le chroma n'est pas très perceptible.
La deuxième partie de l'astuce consiste, lors de l'enregistrement de l'image finale, à cocher la case "Utiliser les paramètres de qualité à partir de l'image d'origine" dans la boîte de dialogue Exporter l'image au format JPEG (sous Paramètres avancés). Faites-le même s'il semble que cela entraînerait une qualité inférieure à celle que vous utiliseriez normalement!
Ce paramètre permet à GIMP de réutiliser les mêmes paramètres de compression que ceux utilisés pour l'image d'origine, ce qui élimine généralement environ 99% des pertes de compression, à condition que vous n'ayez pas trop modifié l'image, et en particulier que les blocs dans le nouvelle image toujours alignée avec celles de l'original. (Il y aura parfois encore des pertes en raison d'erreurs d'arrondi, mais beaucoup moins qu'il n'y en aurait autrement.)
Comme démonstration rapide, j'ai pris cette image de test JPEG de Wikimedia Commons , initialement enregistrée avec un paramètre de qualité assez faible de 50, et y ai ajouté une (fantaisie) sorte de bordure en noir et blanc de 8 pixels en utilisant la méthode décrite ci-dessus:
Voici la différence entre l'original (15,1 kB) et l'image éditée (16,7 kB), montrée en utilisant le mode de calque "Grain extract" de GIMP:
Vous pouvez voir de très légères erreurs de chrominance, dues au fait que la largeur de la bordure n'est pas un multiple de 16, et (si vous regardez de près) quelques blocs où il y avait également des pertes mineures dans le canal de luma en raison de l'arrondi. Pourtant, visuellement, l'original et l'image rembourrée sont pratiquement indiscernables, même à un grossissement 2x et en alternant entre eux.
En particulier, contrastez cela avec le résultat de l' augmentation de la qualité JPEG de 50 à 60 avant d'enregistrer l'image rembourrée, ce qui donne l'image suivante de 17,6 Ko:
À fort grossissement, vous pouvez certainement voir que l'image éditée est nettement plus floue à certains endroits que l'original, et prendre la différence avec l'extrait de grain le confirme:
la source
Désolé si ce n'est pas exactement ce que vous vouliez mais ...
Cela ressemble à l'ajout d'une bordure blanche pour vous aider à positionner votre image lors de l'impression. Pourquoi ne pas vous concentrer sur l'apprentissage des interfaces d'impression correctement et éviter les hacks douteux comme celui-ci? L'autre problème que cela soulève est que vous autorisez le programme d'impression à redimensionner votre image 4680x3120 pour l'adapter à la résolution / DPI correcte. Cela pourrait avoir un effet plus grave que de réenregistrer un fichier jpeg.
la source
Les réponses précédentes sont très bonnes.
Je vais juste ajouter quelques "aspects psychologiques" du format jpg.
Si un jpg est bien préparé, il ne perd qu'environ 0,5% d'informations. C'est dans la grande majorité des cas quelque chose que l'œil humain ne peut pas voir. Vous avez besoin d'un programme pour faire une analyse et voir les différences (comme l'analyse qu'Ilmari vient de faire).
La «bonne qualité» est un processus, pas seulement la façon dont un format de fichier enregistre l'image. Oui, vous avez recompressé le fichier avec jpg une fois de plus parce que vous en aviez vraiment besoin. S'il s'agit d'une situation contrôlée, il est acceptable de le faire.
Vous en aviez vraiment besoin, cela implique que vous ne pouvez pas utiliser un autre format sans perte, que vous avez des besoins de stockage ou de logiciels très spécifiques ou un flux de travail très serré.
Si vous êtes vraiment préoccupé par la qualité, vous n'utiliserez probablement pas Paint. Le format JPG a certaines configurations que vous ne pouvez pas contrôler du tout dans Paint.
Voici ma liste de programmes gratuits où vous pouvez vraiment contrôler la compression jpg et l'option que vous devez sélectionner. (Tous dans la boîte de dialogue d'enregistrement jpg)
Irfanview - Activer Désactiver le sous-échantillonnage des couleurs de chrominance.
Visionneuse d'images FastStone - Sous-échantillonnage des couleurs: Aucun.
Gimp - Sous-échantillonnage 4: 4: 4
Conclusion. N'utilisez pas de peinture.
Une chose que je n'ai pas encore vérifiée. Si tous ces programmes conservent le profil de couleur intégré. Je modifierai mon message plus tard.
la source
IrfanView fonctionne bien pour moi pour les ensembles d'images. Voici quelques notes pratiques
Voici ma procédure stockée pour l'insertion d'une bordure - Procédure Infran pour ajouter une bordure
la source