Encoder et décoder des fichiers en Base64

Encoder des images en Base64

Pour effectuer des requêtes de génération d'images, vous devez envoyer les données d'image sous forme de texte encodé en base64.

Utiliser la ligne de commande

Dans une requête gRPC, vous pouvez écrire directement les données binaires. Cependant, une requête REST utilise JSON. JSON est un format de texte qui n'est pas directement compatible avec les données binaires. Vous devez donc convertir ces données binaires en texte en utilisant l'encodage base64.

La plupart des environnements de développement contiennent un utilitaire natif base64 permettant d'encoder un fichier binaire en données texte ASCII. Pour encoder un fichier, procédez comme suit :

Linux

Encodez le fichier vidéo à l'aide de l'outil de ligne de commande base64, en veillant à empêcher tout retour à la ligne grâce à l'indicateur -w 0 :

base64 INPUT_FILE -w 0 > OUTPUT_FILE

macOS

Encodez le fichier à l'aide de l'outil de ligne de commande base64 :

base64 -i INPUT_FILE -o OUTPUT_FILE

Windows

Encodez le fichier à l'aide de l'outil Base64.exe :

Base64.exe -e INPUT_FILE > OUTPUT_FILE

PowerShell

Encodez le fichier à l'aide de la méthode Convert.ToBase64String :

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

Créez un fichier de requête JSON en intégrant les données encodées en base64 :

JSON

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

Bibliothèques clientes

L'intégration de données binaires dans des requêtes via des éditeurs de texte n'est pas plus souhaitable qu'elle n'est pratique. Concrètement, vous allez incorporer des fichiers encodés en base64 dans le code client. Tous les langages de programmation compatibles intègrent des mécanismes d'encodage de contenu en 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)

Décoder des images en Base64

Les requêtes API renvoient des images générées ou modifiées sous forme de chaînes encodées en base64. Vous pouvez utiliser les exemples de bibliothèque cliente suivants pour décoder ces données et les enregistrer localement en tant que fichier image.

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