staging.inyokaproject.org

Bild als base64 Wert in der CSV

Status: Ungelöst | Ubuntu-Version: Server 22.10 (Kinetic Kudu)
Antworten |

rurotil

Anmeldungsdatum:
7. April 2009

Beiträge: 96

Hallo Leute,

ich brauch ein einer CSV Datei das Bild als base64 Wert?

Geht sowas? Wenn ja wie? Muss ich da noch ein Absoluten Pfad angeben oder wie wird dann das Bild gefunden?

ProductId;ReferenceNo;EAN;Manufacturer;Price_B2B;Discounted;exclVAT;inclVAT;VATRate;VATCountry;Currency;ImagePrimary
2004282;2004282;19457065351;HP;269;269;310,08;369;19;DE;EUR;item2011210000.jpg

noisefloor Team-Icon

Ehemaliger
Avatar von noisefloor

Anmeldungsdatum:
6. Juni 2006

Beiträge: 28316

Hallo,

CSV-Datei bestehen nur aus Text und sonst nichts. Was aus dem Text gemacht wird hängt alleine von dem Programm ab, was die CSV Datei später einliest und die Daten verarbeitet. Klar kannst du irgendeine binäre Datei (wie z.B. eine JPEG-Datei) Base64 kodieren und den resultierenden Text in eine CSV-Datei schreiben. Wenn du die Datei dann aber später z.B. später in Excel oder LibreOffice Calc einliest, dann wird das Feld, in dem die Base64 kodierten Daten stehen, einfach nur als langer String angezeigt. Da wird nichts automagisch zurück in ein JPEG oder so gewandelt.

Genau so würde es sich verhalten, wenn du ein Dateipfad oder eine URL zu einem Bild einfügen würdest.

Gruß, noisefloor

rurotil

(Themenstarter)

Anmeldungsdatum:
7. April 2009

Beiträge: 96

Soweit hatte ich es eigentlich auch verstanden.

Mir fehlt aber der Bezug oder was ich nicht verstehe. Wie ein Programm das Bild finden kann, nur weil es Konvertiert wurde?

noisefloor Team-Icon

Ehemaliger
Avatar von noisefloor

Anmeldungsdatum:
6. Juni 2006

Beiträge: 28316

Hallo,

Wie ein Programm das Bild finden kann, nur weil es Konvertiert wurde?

? - was meinst du damit?

Gruß, noisefloor

rurotil

(Themenstarter)

Anmeldungsdatum:
7. April 2009

Beiträge: 96

Wenn ich das Bild /tmp/image.jpg hier ablege und dann das Bild Konvertiere. Wird da dann der Pfad mitgenommen? oder woher weiß mein Programm wo nun das Bild liegt?

noisefloor Team-Icon

Ehemaliger
Avatar von noisefloor

Anmeldungsdatum:
6. Juni 2006

Beiträge: 28316

Hallo,

verstehe ich immer noch nicht...

Wenn ich das Bild /tmp/image.jpg hier ablege und dann das Bild Konvertiere.

Da fehlt doch ein Satzteil, nämlich der Hauptsatz. Und in was Konvertieren?

Wird da dann der Pfad mitgenommen?

Wohin soll welche Pfad warum mitgenommen werden? In einer Bilddatei steht gar kein Pfad. Ist der Datei auch relativ gleich.

oder woher weiß mein Programm wo nun das Bild liegt?

Indem du deinem Programm (was auch immer dein Programm ist) eine absoluten oder relativen Pfad zur Datei angibst.

Gruß, noisefloor

Dakuan

Avatar von Dakuan

Anmeldungsdatum:
2. November 2004

Beiträge: 6234

Du sprichst in Rätseln und deine Sätze sind unverständlich. Könnte es sein, dass Deutsch nicht deine Muttersprache ist?

ich brauch ein einer CSV Datei das Bild als base64 Wert?

Der Satz macht keinen Sinn, weil base64 damit nichts tu tun hat und als Frage schon mal gar nicht. Du verwirrst die Leser.

... oder wie wird dann das Bild gefunden?

Das steht doch bereits in der CSV Datei: "item2011210000.jpg". Wenn du eine Datei, wie auch immer, konvertierst, musst du diesen Namen anpassen oder die Dateien austauschen. In der Bilddatei wird jedenfalls nichts dergleichen gespeichert.

Wenn du willst, dass dir jemand helfen kann, solltest du mal in kurzen einfachen Sätzen erzählen, was du erreichen willst. Also von Anfang an. Sonst versteht keiner dein Problem.

shiro

Anmeldungsdatum:
20. Juli 2020

Beiträge: 611

ich brauche in einer CSV Datei das Bild als base64 Wert?

Ein Bild (z.B. im jpg Format) wird in der Regel binär als Datei abgespeichert. Das base64 Format wandelt zwei binäre Bytes in 3 "druckbare" Zeichen (Bytes) um. Eine Datei mit einer Länge von z.B. 200kB ist somit 300kB groß, wenn es gemäß base64 Regel encodiert wurde.

Eine csv Datei besteht aus Datensätzen (Zeilen) mit "druckbaren" Zeichen (Bytes), deren Datenfelder durch ein Trennzeichen (z.B. Semikolon ";" oder Komma ",") getrennt sind.

Wenn du ein Bild im base64 Format als Feld in einer csv Datei speichern willst, musst du das Bild in eine base64-Zeichenkette wandeln und in deinen Datensatz einfügen.

Beispiel mit dem Bild "drucker.gif":

$ od -c drucker.gif
0000000   G   I   F   8   9   a 020  \0 020  \0 367  \0  \0  \0  \0  \0
0000020 204 204 204 306 306 306 326 326 316 377 377  \0 377 377 377 377
0000040 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377
*
0001400 377 377 377 377 377 377 377 377 377 377 377 377 377   ! 371 004
0001420 001  \0  \0 003  \0   ,  \0  \0  \0  \0 020  \0 020  \0  \0  \b
0001440   ]  \0  \a  \b 034   H 260 240   A  \0  \b 023   &   <   X 240
0001460 241 303 206  \0 030   * 004   P       b   A 212 017 035   Z   $
0001500   H   q   b 305 205 002   1   f 254   (  \0   @ 311 001 023   '
0001520 226   , 211   P 200 313 227   0   M 312   L   I 323   e   K 230
0001540 002 002 350 264   y 322   $   N 002   @   m   "   D   I   S 245
0001560   E 237   8   y   n   $   Z   t 251 301 247 002 003 002  \0   ;
0001600
$ # Erzeuge base64-Zeichenkette des Bildes
$ bild=$(base64 drucker.gif | tr -d '\n')
$ # Zeige die base64-Zeichenkette dekodiert mit imagemagick an
$ echo $bild | base64 -d | display
$ # Erzeuge csv Datei mit dem Bild
$ echo "ProductId;ReferenceNo;EAN;ImagePrimary;ImageB64
2004282;2004282;19457065351;drucker.gif;$bild
" >beispiel.csv
$ cat beispiel.csv
ProductId;ReferenceNo;EAN;ImagePrimary;ImageB64
2004282;2004282;19457065351;drucker.gif;R0lGODlhEAAQAPcAAAAAAISEhMbGxtbWzv//AP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////yH5BAEAAAMALAAAAAAQABAAAAhdAAcIHEiwoEEACBMmPFigocOGABgqBFAgYkGKDx1aJEhxYsWFAjFmrCgAQMkBEyeWLIlQgMuXME3KTEnTZUuYAgLotHnSJE4CQG0iRElTpUWfOHluJFp0qcGnAgMCADs=

$

Da das Bild direkt in z.B. dem Feld "ImageB64" gespeichert wird, braucht man keinen Dateinamen oder Dateipfad zu kennen oder zu speichern, obwohl ich hier im Feld "ImagePrimary" den Namen als Information eingetragen habe.

Antworten |