Codifique e descodifique ficheiros em Base64

Codifique imagens em Base64

Para fazer pedidos de geração de imagens, tem de enviar os dados de imagens como texto codificado em Base64.

Usar a linha de comandos

Num pedido gRPC, pode simplesmente escrever dados binários diretamente; no entanto, o JSON é usado quando faz um pedido REST. O JSON é um formato de texto que não suporta diretamente dados binários, pelo que tem de converter esses dados binários em texto através da codificação Base64.

A maioria dos ambientes de desenvolvimento contém um utilitário base64 nativo para codificar um ficheiro binário em dados de texto ASCII. Para codificar um ficheiro:

Linux

Codifique o ficheiro através da ferramenta de linhas de comandos base64, certificando-se de que impede a mudança de linha com a marca -w 0:

base64 INPUT_FILE -w 0 > OUTPUT_FILE

macOS

Codifique o ficheiro com a ferramenta de linha de comandos base64:

base64 -i INPUT_FILE -o OUTPUT_FILE

Windows

Codifique o ficheiro com a ferramenta Base64.exe:

Base64.exe -e INPUT_FILE > OUTPUT_FILE

PowerShell

Codifique o ficheiro através do método Convert.ToBase64String:

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

Crie um ficheiro de pedido JSON, incorporando os dados codificados em base64:

JSON

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

Usar bibliotecas de cliente

A incorporação de dados binários em pedidos através de editores de texto não é desejável nem prática. Na prática, vai incorporar ficheiros codificados em base64 no código do cliente. Todas as linguagens de programação suportadas têm mecanismos incorporados para codificar conteúdo em 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.
String encodedString = Base64.getEncoder().encodeToString(imageFile.getBytes());

Ir

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)

Descodifique imagens em Base64

Os pedidos da API devolvem imagens geradas ou editadas como strings codificadas em base64. Pode usar os seguintes exemplos de bibliotecas de cliente para descodificar estes dados e guardá-los localmente como um ficheiro de imagem.

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

Ir

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