Öffnen und speichern base64-codierte Bild-Daten-URI in Ruby
Aus einigen Beiträge habe ich gesehen, ich bin versuchen, diese
x = Base64.decode64("data:image/png;base64,iVBOR....")
File.open('test.png','wb') {|file| file.write x}
Dann kann ich aber nicht öffnen das Bild mit einem viewer, habe ich noch mehr zu tun?
- Verzeihen Sie mein eindringen: nur für den Fall, dass Sie hier angekommen sind (wie ich) auf der Suche nach PNG base64 Kodieren oneliner in ruby:
"data:image/png;base64,"+Base64.strict_encode64(File.read("test.png"))
-- tragen auf. 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dein problem ist, dass Sie versuchen zu entschlüsseln, die
'data:image/png;base64,'
Präfix als Base64-Daten; das Präfix ist perfekt gültige Base64-Daten, aber es ist nicht die Base64-Darstellung eines PNG-Datei. Das Ergebnis ist, dass Ihretest.png
- Datei enthält eine Reihe von Unsinn, gefolgt von einigen bits, die eigentlich eine PNG-Datei. Streifen aus dem data-URL-Präfix vor der Entschlüsselung des PNG:data_url.match(/data:(.*);base64,(.*)/)
um die encode-Typ, Datei-format, Bild und Daten, aber ich bin mir nicht sicher, ob dies könnte dazu führen, dass performance-Problem beim string ist groß.Base64.decode64( data_url.remove('data:image/png;base64,') )
String#[]
mit einem Range-argument aber wahrscheinlich klarer, wenn Sie nicht verwendet werden, um.. -1
reicht.mu_is_too_short Antwort ist ziemlich nah, aber es wird davon ausgegangen, dass die base64-stream enthalten, die PNG-Daten. Dies ist nicht immer der Fall ist, so schlage ich vor zu verwenden mime-Typen-Bibliothek zu etablieren, die korrekte Dateiendung:
Statt mit einem
Regexp
Sie können auch Gebrauch machen von der einfache String#index Methode.Wenn Sie eine einigermaßen vernünftige Datenquelle (wie JavaScript
.toDataURL()
auf einecanvas
), Sie können sich darauf verlassen, dass die gängigen MIME-types wird keine Kommas enthalten.Wenn Sie arbeiten, mit einem freien-Formular-Benutzer die Datei hochladen, beachten Sie, dass ein paar ungewöhnlichen mime-Typen enthalten Kommas (z.B.:
text/x-java-source,java
). Sie können die konservativen:Wenn Sie nicht wissen, wenn Sie haben unprefixed base64 oder Daten base64-URL, die Sie verwenden können
#index
als test:das ist ein kleines Skript über das öffnen von base64-image,vacio.txt ist die Datei wenn ich das base64-text.