2016-05-25 12 views
0

Ich erstelle animierte GIF-Dateien aus mehreren Quellbildern mit Ruby. Ich muss den Durchsatz maximieren/den Zeitaufwand für die Erstellung der einzelnen GIF minimieren. Ich würde es vorziehen, die Quellbilder im Speicher zu behalten (wahrscheinlich Memcached), anstatt sie von der Platte jedes Mal zu lesen, wenn ich sie brauche. Ich habe convert in Backticks verwendet, um ImageMagick Befehle direkt von Ruby, z.Minimieren Disc-Aktivität mit rmagick oder imagemagick

`convert -delay #{delay} -page #{w}x#{h}+0+0 src01.gif... etc` 

ich dies etwas mehr als RMagick bevorzugen, wie ich weitere Beispiele gefunden habe, kann ich direkt den ImageMagick docs verweisen. Es scheint, dass Bilder, die an den Befehl convert übergeben werden, Pfade zu Bildern auf der CD sein müssen. Außerdem scheint die Ausgabe des convert commend ein Dateipfad zu sein, so dass das generierte Bild von ImageMagick auf eine Disc geschrieben würde und ich es mit Ruby zurücklesen müsste, um auf die resultierenden Bilddaten zuzugreifen. Es scheint, als würde ich ImageMagick jedes Mal die Quellbilder von der CD lesen lassen und die generierte GIF jedes Mal auf die CD schreiben. Ich denke, das ist wahrscheinlich ein Engpass und unnötig, da ich die generierten Bilder, die ich gerade brauche, um auf ihre Bilddaten in Ruby zugreifen zu können, nicht dauerhaft machen muss.

Ich bemerkte, dass RMagick Methoden Magick::Image s als Parameter anstelle von Dateipfaden nehmen können. Ich könnte die Quellbilder in diesem Fall im Speicher behalten. Außerdem gibt RMagick das generierte Bild als Daten an Ruby zurück, was ich brauche, ich brauche es nicht auf CD geschrieben.

Ich denke an mit RMagick statt

`convert...` 

Plattenaktivität zu reduzieren.

Also Frage 1: Macht das aber Sinn? Da RMagick ImageMagick vermutlich umschließt, kann RMagick tatsächlich unter der Haube auf Disc lesen und schreiben oder hat es eine Möglichkeit, ImageMagick ohne Disc-Aktivität zu verwenden?

Und Frage 2: Gibt es eine Möglichkeit, Bilddaten ohne CD-Aktivität in ImageMagick Convert-Befehl ein- und aussteigen?

Hope das macht Sinn. Ich versuche nur, meinen Kopf darum zu wickeln und entschuldige mich, wenn ich unklar bin.

+3

Sie könnten vielleicht überlegen, eine kleine RAMdisk als eine Option zu machen. –

+0

Natürlich können Sie auch die Bilder in Ruby akkumulieren/generieren und ein animiertes GIF aus der Sequenz erstellen ... nicht sicher über die Ruby-Syntax, aber in PHP "addImage()" für jeden der Frames, bis Sie haben die vollständige Sequenz, dann tun Sie 'setImageDispose()' und 'writeImages (" animated.gif ", true)' –

Antwort

1

Macht das aber Sinn?

Nicht wirklich. Wir können über offene fd's und Kosten von Shell-Umgebungen über direkte API streiten, aber es würde keinen Platten-I/O-Vorteil zwischen dem Konvertierungshilfsprogramm & RMagick geben.

Gibt es eine Möglichkeit, Bilddaten ohne CD-Aktivität in den Convert-Befehl von ImageMagick ein- und auszublenden?

ImageMagick wird mit stream Dienstprogramm geliefert. Es gibt nicht viel Verwendungsdokumentation, aber es könnte genutzt werden, um die Bilddaten in einen Blob zu extrahieren, der über Memcached verteilt werden kann.

Es gibt auch das Protokoll mpr:, um mit Label-basierten Speicherzugriff umzugehen, aber das ist vielleicht nicht die verteilte Lösung, nach der Sie suchen. Plus-Daten werden zum Zeitpunkt des Prozessabschlusses entfernt.

Persönlich Marks Kommentar über RAMdisk wäre etwas, was ich empfehlen würde.Ein einfacher memory/tmpfs-mount ist einfach auf einem System einzurichten, und dann wäre es nur eine Frage der Aktualisierung der policy.xml-Konfiguration, das mount als temporäres Verzeichnis zu verwenden.

Verwandte Themen