קידוד ופענוח של קבצים ב-Base64

קידוד תמונות ב-Base64

כדי לשלוח בקשות ליצירת תמונות, צריך לשלוח את נתוני התמונה כטקסט בקידוד Base64.

שימוש בשורת הפקודה

בבקשת gRPC, אפשר פשוט לכתוב נתונים בינאריים ישירות. עם זאת, כשמבצעים בקשת REST, משתמשים ב-JSON. ‫JSON הוא פורמט טקסט שלא תומך ישירות בנתונים בינאריים, ולכן תצטרכו להמיר נתונים בינאריים כאלה לטקסט באמצעות קידוד Base64.

רוב סביבות הפיתוח מכילות כלי עזר מקורי של base64 לקידוד קובץ בינארי לנתוני טקסט ב-ASCII. כדי לקודד קובץ:

Linux

מקודדים את הקובץ באמצעות הכלי base64 בשורת הפקודה, ומוודאים שמונעים גלישת שורות באמצעות הדגל -w 0:

base64 INPUT_FILE -w 0 > OUTPUT_FILE

macOS

מקודדים את הקובץ באמצעות הכלי base64 של שורת הפקודה:

base64 -i INPUT_FILE -o OUTPUT_FILE

Windows

מקודדים את הקובץ באמצעות הכלי Base64.exe:

Base64.exe -e INPUT_FILE > OUTPUT_FILE

PowerShell

מבצעים קידוד של הקובץ באמצעות ה-method‏ Convert.ToBase64String:

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

יוצרים קובץ בקשת JSON, ומוסיפים את הנתונים בקידוד base64:

JSON

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

שימוש בספריות לקוח

הטמעה של נתונים בינאריים בבקשות באמצעות עורכי טקסט היא לא רצויה ולא מעשית. בפועל, תטמיעו קבצים בקידוד base64 בקוד הלקוח. לכל שפות התכנות הנתמכות יש מנגנונים מובנים לקידוד תוכן ב-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)

פענוח תמונות ב-Base64

בקשות API מחזירות תמונות שנוצרו או נערכו כמחרוזות בקידוד Base64. אפשר להשתמש בדוגמאות הבאות של ספריות לקוח כדי לפענח את הנתונים האלה ולשמור אותם באופן מקומי כקובץ תמונה.

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