GNU/Linux >> Tutoriels Linux >  >> Linux

Je souhaite modifier le DPI avec ImageMagick sans modifier la taille réelle en octets des données d'image

Spécifiez les unités - il me semble me souvenir d'avoir eu un problème lorsque j'ai omis cette option (bien que le DPI doive être la valeur par défaut), par exemple :

convert -units PixelsPerInch input.png -density 300 output.png

Savez-vous quels champs de données intégrés GIMP utilise pour lire la résolution - a-t-il les siens qui remplacent les champs standard utilisés par ImageMagick ? Par exemple, Photoshop utilise Photoshop:XResolution et Photoshop:YResolution vous devez donc les définir pour que Photoshop reconnaisse un paramètre de densité (ImageMagick ne peut pas le faire - nous utilisons ExifTool).


Notez que vous pouvez utiliser Exiftool pour lire les résolutions. Par exemple, Exiftool '-*resolution*' c.jpg pourrait montrer

Résolution Unité :poucesX Résolution :300Y Résolution :300

Exiftool est également capable de définir des paramètres, mais comme indiqué dans la page de manuel Image::ExifTool::TagNames , les balises supplémentaires XResolution et YResolution ne sont pas inscriptibles par Exiftool.

Je ne sais pas si ImageMagick a des options de changement de résolution, mais je serais surpris si ce n'était pas le cas. De plus, il est simple d'écrire des scripts GIMP pour automatiser des tâches comme celle-ci, et il est également possible de modifier les résolutions avec de petits programmes. Par exemple, voici un programme C (compilable via gcc setRes.c -O3 -Wall -o setRes ) qui lit les premiers octets d'un fichier jpeg, modifie les résolutions à 300 et les réécrit. Le programme tel qu'illustré utilise des constantes pour les machines little-endian, comme x86. S'il est exécuté sur une machine big-endian, il doit se terminer par un message du type Error: xyz may be not a .jpg file , même si xyz est un fichier jpeg. Remarque, je n'ai pas testé les images résultantes via pdflatex; vous trouveriez probablement utile de poster une question dans le tex SE.

/* jiw -- 24 Sep 2012 -- Re: set resolution in a jpg -- Offered without
warranty under GPL v3 terms as at http://www.gnu.org/licenses/gpl.html
*/
#include <stdlib.h>
#include <stdio.h>
void errorExit(char *msg, char *par, int fe) {
  fprintf (stderr, "\n%3d Error: %s %s\n", fe, msg, par);
  exit (1);
}
// Note, hex constants are byte-reversed on little vs big endian machines
enum { JF=0x464a, IF=0x4649, L300=0x2c01, B300=0x012c, NEWRES=L300};
int main(int argc, char *argv[]) {
  FILE *fi;
  short int buf[9];
  int r, L=sizeof buf;
  if (argc<2) errorExit(argv[0], "requires a .jpg file name", 0);
  fi = fopen(argv[1], "r+b");
  if(!fi) errorExit("open failed for", argv[1], ferror(fi));
  r = fread(buf, 1, L, fi);
  if (r != L) errorExit("read failed for", argv[1], ferror(fi));
  if (buf[3] != JF || buf[4] != IF) // Check JFIF signature
    errorExit(argv[1], "may be not a .jpg file", 0);
  buf[7] = buf[8] = NEWRES;
  fseek(fi, 0, SEEK_SET);
  r = fwrite(buf, 1, L, fi);
  if (r != L) errorExit("write failed for", argv[1], ferror(fi));
  return 0;
}

Je n'arrivais pas à comprendre comment convaincre de convertir ajouter uniquement les métadonnées et ne pas ré-encoder mon bitmap [monochrome] ; il agrandissait le fichier> 50%.

J'ai découvert que pngcrush (pas un outil ImageMagick) peut également ajouter les métadonnées de densité. Cette ligne de commande le marque à 600 dpi et permet d'autres optimisations, ce qui a réduit la taille du fichier d'environ 10 % :

pngcrush -res 600 in.png out.png

Linux
  1. Astuce :convertissez des images en ligne de commande avec ImageMagick

  2. Remplacer les variables d'environnement dans un fichier par leurs valeurs réelles ?

  3. Comment dupliquer un fichier sans copier ses données avec Btrfs ?

  4. Fichier de suppression Linux de taille 0

  5. commande tr - comment remplacer la chaîne \n par une nouvelle ligne réelle (\n)

Redimensionner une image depuis le terminal Linux

Comment éditer un fichier sans changer ses horodatages sous Linux

Le guide ultime de la manipulation d'images avec ImageMagick

Sécurisez Linux avec le fichier Sudoers

Changer le répertoire par défaut d'un programme spécifique sans changer son chemin

Changer l'ordre des lignes dans un fichier