2017-05-11 3 views
2

Ich versuche ImageMagick etwas für mich zu tun und ich stoße auf ein paar Probleme. Erstens verstehe ich Maßeinheiten nicht und solche sind in ImageMagick eingegangen und so erzeugt mein Skript nicht das, was ich brauche. Zweitens ist die Art, wie ich es mache, äußerst ineffizient. Das Ausführen dieses Skripts dauert sehr lange (die unten abgebildete Version ist etwas von dem, was ich gerade ausführe, abgeschnitten).Ein Bild über eine Seite mit ImageMagick mit Druckrändern kacheln?

Also was ich tue ... Ich habe eine Reihe von Svg-Dateien mit Symbolen in ihnen. Ich möchte eine Seite für jede dieser Dateien erstellen. Die generierte Seite enthält das Symbol, das über die gesamte Seite mit einem Rand an der Seite gekachelt ist. Ich suche nach 1/2-Zoll-Fliesen mit 1/2 Rändern um die Seite, die ein US-Brief (8 1/2 x 11 Zoll) sein muss.

Nachdem ich viel von der Dokumentation gelesen habe, ist es das, was ich mir ausgedacht habe.

colors=(red blue purple yellow green black) 

mkdir -p generated/icons/ 
for color in ${colors[@]}; do 
    images=`printf "source/icons/${color}.svg%.0s " {1..300}` 
    montage $images -tile 15x20 -page Letter+1+1 -units PixelsPerInch -density 2550x3300 \ 
        generated/icons/${color}.pdf 
done 

Also für jede meiner Dateien ich laufe Montage. Ich verwende printf, um den Bilddateinamen 300 Mal zu wiederholen. Ich kachle das dann 15x20 mal. 15x20 kommt von 8,5 minus 1 Zoll Margen = 7,5 * 2 = 15 und ebenso (11-1) * 2 = 20. 300 Bilder kommen von 15 * 20. Ich sage dann, ich will dies auf einer Briefseite Offset 1x1. (Dies war mein Versuch mit einer Marge) Ich sage, ich spreche in Pixel pro Zoll (aber keine der Einheiten scheinen zu entsprechen). Ich setze die dpi auf 300 durch den Dichte-Befehl, wo 8,5 * 300 = 2550 und 11 * 300 = 3300.

Ich spielte mit anderen Einstellungen (Geometrie usw.), aber keiner von diesen funktioniert. Und die Einheiten scheinen auch keinen Sinn zu ergeben ... Im Moment ist meine resultierende PDF ein Quadrat usw.

Wie mache ich gekachelte Seiten als solche? Gibt es auch eine Möglichkeit für mich, dies effizienter zu tun? Was ich bisher habe, ist sehr langsam.

EDIT:

Mehr Informationen:

i:montage --version Version: ImageMagick 6.8.8-10 Q16 x86_64 2015-03-10 http://www.imagemagick.org

Kachelbild: enter image description here

meiner aktuellen Ausgabe: enter image description here

Unsere Margen Recht nicht, ist Platz kein Brief Seite, auch Fliesen wie verzerrt

+0

Es wäre sehr hilfreich für uns zu verstehen, was Sie zu tun versuchen, wenn Sie eine SVG-Datei und ein entsprechendes Ausgabebeispiel bereitstellen. Auch welche Version von ImageMagick verwenden Sie? Das Tiling wird effizienter durchgeführt, indem das Bild nur einmal und nicht so oft konvertiert und gelesen wird. Eine Anzahl von Tiling-Methoden finden Sie unter http://www.imagemagick.org/Usage/canvas/#tile. Ich verwende normalerweise die Methode mpr:. – fmw42

+0

@ fmw42 hat einige Bilder hinzugefügt, die zeigen, was ich gerade habe. –

+0

Ihre Eingabe ist ein PNG und kein SVG. Wir können also nicht mit Ihren Startbedingungen beginnen. Können Sie einen Link zu der SVG-Datei veröffentlichen, die der von Ihnen bereitgestellten PNG-Datei entspricht? Was meinst du damit gekacheltes Bild ist schief? Ich sehe das nicht. – fmw42

Antwort

3

Angesichts der PNG-Bild zur Verfügung gestellt, und ich nehme an, Sie wollen eine 1 Zoll Grenze von Weiß rundherum in einem 8,5 x 11 Zoll Druckbild. So wäre die Fliesenbreite 7,5 Zoll und die Fliesenhöhe wäre 10 Zoll.

  • 1 in = 300 dpi so Grenzdicke = 300 px = 2 Fliesen dicke
  • 11-1 = 10 Zoll groß für Ziegelbereich Höhe = 10 * 300 = 3000 Pixel
  • 8.5-1 = 7,5 Zoll breit für Ziegelbereichsbreite = 7,5 * 300 = 2250 px
  • 1 tile = 0,5 Zoll bei 300 dpi = 0,5 * 300 = 150 px

convert lUDbK.png -resize "150x150!" -write mpr:tile +delete -size 2250x3000 tile:mpr:tile -bordercolor white -border 300 -units pixelsperinch -density 300 tiled_page.png 

Zeit zu verarbeiten war 1,75 Sekunden auf meinem Mac Mini.

Dies erzeugt ein Bild, das ziemlich groß ist.Sie müssen das Bild extrahieren, um den Rand zu sehen, da dieser Seitenhintergrund weiß ist.

enter image description here

(Beachten Sie, dass nur PNG pixelspercentimeter unterstützt, aber IM wandelt meine Angabe pixelperinch entsprechend. Wenn Sie also in den Meta-Daten aussehen, wird es wahrscheinlich zeigen Sie eine andere Dichte in Einheiten von pixelspercentimeter. Aber sie entspricht den gewünschten 300 dpi.)

+0

Danke, das ist was ich wollte. Ich habe eine leichte Anpassung vorgenommen, da ich nur 1/2 Rand wollte, damit es auf eine Seite passt. Ebenso ist die Leistung akzeptabel. –

Verwandte Themen