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