GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Ich möchte DPI mit ImageMagick ändern, ohne die tatsächliche Bytegröße der Bilddaten zu ändern

Geben Sie die Einheiten an - ich erinnere mich, dass ich ein Problem hatte, als ich diese Option weggelassen habe (obwohl DPI die Standardeinstellung sein sollte), zum Beispiel:

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

Wissen Sie, welche eingebetteten Datenfelder GIMP zum Lesen der Auflösung verwendet - hat es eigene, die die von ImageMagick verwendeten Standardfelder überschreiben? Beispielsweise verwendet Photoshop Photoshop:XResolution und Photoshop:YResolution Sie müssen diese also festlegen, damit Photoshop eine Dichteeinstellung erkennt (ImageMagick kann dies nicht tun - wir verwenden ExifTool).


Beachten Sie, dass Sie Exiftool verwenden können, um Auflösungen auszulesen. Beispiel:Exiftool '-*resolution*' c.jpg könnte angezeigt werden

Auflösungseinheit:ZollX Auflösung:300Y Auflösung:300

Exiftool kann auch Parameter setzen, aber wie in Manpage Image::ExifTool::TagNames angegeben , die Extra-Tags XResolution und YResolution können nicht von Exiftool geschrieben werden.

Ich weiß nicht, ob ImageMagick Optionen zum Ändern der Auflösung hat, wäre aber überrascht, wenn dies nicht der Fall wäre. Außerdem ist es einfach, GIMP-Skripte zu schreiben, um Aufgaben wie diese zu automatisieren, und es ist auch möglich, Auflösungen mit kleinen Programmen zu ändern. Das Folgende ist beispielsweise ein C-Programm (kompilierbar über gcc setRes.c -O3 -Wall -o setRes ), das die ersten paar Bytes einer JPEG-Datei liest, die Auflösung auf 300 ändert und sie neu schreibt. Das gezeigte Programm verwendet Konstanten für Little-Endian-Maschinen wie x86. Wenn es auf einem Big-Endian-Rechner ausgeführt wird, sollte es mit einer Nachricht wie Error: xyz may be not a .jpg file enden , auch wenn xyz ist eine JPEG-Datei. Beachten Sie, dass ich die resultierenden Bilder nicht über pdflatex getestet habe; Sie würden es wahrscheinlich lohnen, eine Frage in der tex SE zu stellen.

/* 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;
}

Ich konnte nicht herausfinden, wie ich Convert überzeugen könnte nur die Metadaten hinzuzufügen und meine [monochrome] Bitmap nicht neu zu codieren; die Datei wurde um>50 % erweitert.

Ich habe diesen pngcrush entdeckt (kein ImageMagick-Tool) kann auch die Dichte-Metadaten hinzufügen. Diese Befehlszeile markiert es mit 600 dpi und ermöglicht andere Optimierungen, die die Dateigröße um ~ 10 % reduziert haben:

pngcrush -res 600 in.png out.png

Linux
  1. Lesen und schreiben Sie Daten von überall mit Umleitung im Linux-Terminal

  2. Erste Schritte mit dem Linux-tac-Befehl

  3. Umgebungsvariablen in einer Datei durch ihre tatsächlichen Werte ersetzen?

  4. Ändern Sie die Berechtigungen einer Datei

  5. Linux-Löschdatei mit Größe 0

Ändern Sie die Größe eines Bildes über das Linux-Terminal

So bearbeiten Sie eine Datei, ohne ihre Zeitstempel in Linux zu ändern

Die ultimative Anleitung zur Bildbearbeitung mit ImageMagick

Sichern Sie Linux mit der Sudoers-Datei

Ändern Sie das Standardverzeichnis eines bestimmten Programms, ohne seinen Pfad zu ändern

Ändern Sie die Reihenfolge der Zeilen in einer Datei