Codificar imágenes en Base64
Para enviar solicitudes de generación de imágenes, debes enviar los datos de la imagen como texto codificado en Base64.
Usar la línea de comandos
En una solicitud gRPC, puedes escribir datos binarios directamente. Sin embargo, se usa JSON al hacer una solicitud REST. JSON es un formato de texto que no admite directamente datos binarios, por lo que tendrás que convertir esos datos en texto mediante la codificación Base64.
La mayoría de los entornos de desarrollo contienen una utilidad base64
nativa para codificar un archivo binario en datos de texto ASCII. Para codificar un archivo, sigue estos pasos:
Linux
Codifica el archivo con la herramienta de línea de comandos base64
. Asegúrate de evitar el salto de línea con la marca -w 0
:
base64 INPUT_FILE -w 0 > OUTPUT_FILE
macOS
Codifica el archivo con la herramienta de línea de comandos base64
:
base64 -i INPUT_FILE -o OUTPUT_FILE
Windows
Codifica el archivo con la herramienta Base64.exe
:
Base64.exe -e INPUT_FILE > OUTPUT_FILE
PowerShell
Codifica el archivo con el método Convert.ToBase64String
:
[Convert]::ToBase64String([IO.File]::ReadAllBytes("./INPUT_FILE")) > OUTPUT_FILE
Crea un archivo de solicitud JSON insertando los datos codificados en base64:
JSON
{ "instances": [ { "prompt": "TEXT_PROMPT", "image": { "bytes_base64_encoded": "B64_BASE_IMAGE" } } ] }
Usar bibliotecas de cliente
No es recomendable ni práctico insertar datos binarios en solicitudes a través de editores de texto. En la práctica, insertarás archivos codificados en base64 en el código del cliente. Todos los lenguajes de programación admitidos tienen mecanismos integrados para codificar contenido 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.
String encodedString = Base64.getEncoder().encodeToString(imageFile.getBytes());
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)
Decodificar imágenes en Base64
Las solicitudes a la API devuelven imágenes generadas o editadas como cadenas codificadas en Base64. Puedes usar los siguientes ejemplos de bibliotecas de cliente para decodificar estos datos y guardarlos localmente como un archivo de imagen.
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)
}