Codifica e decodifica di file Base64

Immagini di codifica Base64

Per effettuare richieste di generazione di immagini, devi inviare i dati immagine come testo codificato in Base64.

Utilizzo della riga di comando

All'interno di una richiesta gRPC, puoi semplicemente scrivere direttamente dati binari. Tuttavia, quando si effettua una richiesta REST, viene utilizzato JSON. JSON è un formato di testo che non supporta direttamente i dati binari, pertanto dovrai convertire questi dati binari in testo utilizzando la codifica Base64.

La maggior parte degli ambienti di sviluppo contiene un'utilità base64 nativa per codificare un programma binario in dati di testo ASCII. Per codificare un file:

Linux

Codifica il file utilizzando lo strumento a riga di comando base64, assicurandoti di evitare il wrapping delle righe utilizzando il flag -w 0:

base64 INPUT_FILE -w 0 > OUTPUT_FILE

macOS

Codifica il file utilizzando lo strumento a riga di comando base64:

base64 -i INPUT_FILE -o OUTPUT_FILE

Windows

Codifica il file utilizzando lo strumento Base64.exe:

Base64.exe -e INPUT_FILE > OUTPUT_FILE

PowerShell

Codifica il file utilizzando il metodo Convert.ToBase64String:

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

Crea un file di richiesta JSON che incorpora i dati codificati in base64:

JSON

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

Utilizzo delle librerie client

L'incorporamento di dati binari nelle richieste tramite editor di testo non è desiderabile o pratico. In pratica, incorporerai i file con codifica Base64 all'interno del codice client. Tutti i linguaggi di programmazione supportati hanno meccanismi integrati per i contenuti con codifica Base64.

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)

Decodifica delle immagini in Base64

Le richieste API restituiscono immagini generate o modificate come stringhe con codifica Base64. Puoi utilizzare i seguenti esempi di librerie client per decodificare questi dati e salvarli localmente come file immagine.

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)
}