Dateien mit Base64 codieren und decodieren

Bilder mit Base64 codieren

Wenn Sie Anfragen zur Bildgenerierung senden möchten, müssen Sie Bilddaten als Base64-codierten Text senden.

Befehlszeile verwenden

Innerhalb einer gRPC-Anfrage können Sie die Binärdaten einfach direkt ausschreiben. Bei einer REST-Anfrage müssen Sie jedoch JSON verwenden. JSON ist ein Textformat, das Binärdaten nicht direkt unterstützt, weshalb diese mit der Base64 in Text umgewandelt werden müssen.

Die meisten Entwicklungsumgebungen enthalten ein natives base64-Dienstprogramm, um ein Binärbild als ASCII-Textdaten zu codieren. So codieren Sie eine Datei:

Linux

Codieren Sie die Datei mithilfe des base64-Befehlszeilentools und achten Sie darauf, Zeilenumbrüche mithilfe des Flags -w 0 zu verhindern:

base64 INPUT_FILE -w 0 > OUTPUT_FILE

macOS

Codieren Sie die Datei mit dem base64-Befehlszeilentool:

base64 -i INPUT_FILE -o OUTPUT_FILE

Windows

Codieren Sie die Datei mit dem Tool Base64.exe:

Base64.exe -e INPUT_FILE > OUTPUT_FILE

PowerShell

Codieren Sie die Datei mit der Methode Convert.ToBase64String:

[Convert]::ToBase64String([IO.File]::ReadAllBytes("./INPUT_FILE")) > OUTPUT_FILE

Erstellen Sie eine JSON-Anfragedatei, die die base64-codierten Daten enthält:

JSON

{
  "instances": [
    {
      "prompt": "TEXT_PROMPT",
      "image": {
        "bytes_base64_encoded": "B64_BASE_IMAGE"
      }
    }
  ]
}

Clientbibliotheken verwenden

Binäre Daten mit Texteditoren in Anfragen einzubetten, ist weder wünschenswert noch praktisch. In der Praxis betten Sie base64-codierte Dateien in den Clientcode ein. Alle unterstützten Programmiersprachen haben integrierte Mechanismen für die base64-codierte Inhalte:

Python

# Import the base64 encoding library.
import base64

# Pass the image data to an encoding function.
def encode_image(image):
    with open(image, "rb") as image_file:
        encoded_string = base64.b64encode(image_file.read())
    return encoded_string

Node.js

// Read the file into memory.
var fs = require('fs');
var imageFile = fs.readFileSync('/path/to/file');

// Convert the image data to a Buffer and base64 encode it.
var encoded = Buffer.from(imageFile).toString('base64');

Java

// Import the Base64 encoding library.
import org.apache.commons.codec.binary.Base64;

// Encode the image.
byte[] imageData = Base64.encodeBase64(imageFile.getBytes());
String encodedString = Base64.getEncoder().encodeToString(imageData);

Go

import (
    "bufio"
    "encoding/base64"
    "io"
    "os"
)

// Open image file.
f, _ := os.Open("image.jpg")

// Read entire image into byte slice.
reader := bufio.NewReader(f)
content, _ := io.ReadAll(reader)

// Encode image as base64.
base64.StdEncoding.EncodeToString(content)

Base64-Decodierung von Bildern

API-Anfragen geben generierte oder bearbeitete Bilder als base64-codierte Strings zurück. Sie können folgende Beispiele für die Clientbibliothek verwenden, um diese Daten zu decodieren und lokal als Bilddatei zu speichern.

Python

# Import the base64 encoding library.
import base64

# Pass the base64 encoded image data to a decoding function and save image file.
def decode_image(b64_encoded_string):
   with open("b64DecodedImage.png", "wb") as fh:
     fh.write(base64.decodebytes(b64_encoded_string))

Node.js

var fs = require('fs');

// Create buffer object, specifying base64 as encoding
var buf = Buffer.from(base64str,'base64');

// Write buffer content to a file
fs.writeFile("b64DecodedImage.png", buf, function(error){
  if(error){
    throw error;
  }else{
    console.log('File created from base64 string');
    return true;
  }
});

Java

// Import libraries
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.io.FileUtils;

// Create new file
File file = new File("./b64DecodedImage.png");
// Convert base64 encoded string to byte array
byte[] bytes = Base64.decodeBase64("base64");
// Write out file
FileUtils.writeByteArrayToFile(file, bytes);

Go

// Import packages
import (
   "encoding/base64"
   "io"
   "os"
)

// Add encoded file string
var b64 = `TWFuIGlz...Vhc3VyZS4=`

// Decode base64-encoded string
dec, err := base64.StdEncoding.DecodeString(b64)
if err != nil {
    panic(err)
}

// Create output file
f, err := os.Create("b64DecodedImage.png")
if err != nil {
    panic(err)
}
defer f.Close()

if _, err := f.Write(dec); err != nil {
    panic(err)
}
if err := f.Sync(); err != nil {
    panic(err)
}