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.