Base64 sang ảnh

Đầu vào Base640 Ký tự

Chuyển đổi dữ liệu mã hóa Base64 thành ảnh có thể xem trước và tải xuống, hỗ trợ 7+ định dạng ảnh phổ biến như PNG/JPG/WebP/GIF/SVG. Tự động nhận diện tiền tố Data URL, xem trước trực tiếp trong trình duyệt, phù hợp cho gỡ lỗi giao diện và kiểm tra mã hóa.

Đề xuất Liên quan

Base64 sang ảnh là gì?

Base64 sang ảnh là quá trình ngược lại của mã hóa Base64: khôi phục chuỗi đã mã hóa Base64 thành dữ liệu ảnh nhị phân ban đầu (các định dạng như PNG / JPG / WebP / GIF / SVG, v.v.), sau đó xem trước trực tiếp trong trình duyệt hoặc tải xuống dưới dạng tệp ảnh cục bộ. Đây là công cụ thiết yếu khi xử lý ảnh trả về từ API, tài nguyên nội tuyến (Data URL), tệp đính kèm email dạng Base64 và các tình huống tương tự.

**Nguyên lý cốt lõi:** Base64 mã hóa dữ liệu nhị phân thành 64 ký tự ASCII có thể in được (A-Z, a-z, 0-9, +, /). Chuyển sang ảnh chính là khôi phục chuỗi ASCII này trở lại luồng byte nhị phân ban đầu, sau đó trình duyệt phân tích thành pixel ảnh để hiển thị theo loại MIME được chỉ định (như image/png). Data URL (ví dụ `data:image/png;base64,iVBORw0KGgo...`) là dạng kết hợp của Base64 + tiền tố MIME, công cụ sẽ tự động nhận diện và xử lý.

**Các tình huống sử dụng điển hình:** ①Gỡ lỗi API: nhiều API trả về mã xác minh ảnh, ảnh đại diện người dùng, chữ ký điện tử dưới dạng chuỗi Base64 trực tiếp, phía frontend cần khôi phục để xem; ②Phát triển frontend: biểu tượng nhỏ nhúng bằng Data URL (CSS background-image: url(data:image/png;base64,...)) có thể dán vào công cụ để xem hiệu ứng thực tế; ③Khôi phục tệp đính kèm email: tệp đính kèm mã hóa MIME Base64 có thể giải mã trở lại ảnh gốc để lưu; ④Dữ liệu thu thập web: ảnh Base64 thu thập được có thể giải mã và lưu thành tệp cục bộ; ⑤Tiền xử lý OCR: sau khi giải mã, sử dụng công cụ OCR để nhận diện nội dung ảnh.

**Các định dạng ảnh được hỗ trợ:** Công cụ hỗ trợ tất cả các loại MIME ảnh mà trình duyệt nhận diện nguyên bản: PNG (image/png), JPG/JPEG (image/jpeg), WebP (image/webp), GIF (image/gif), SVG (image/svg+xml), BMP (image/bmp), AVIF (image/avif), ICO (image/x-icon), v.v. Mỗi định dạng có thuật toán nén và tình huống áp dụng khác nhau: PNG không mất dữ liệu phù hợp cho biểu tượng và ảnh chụp màn hình, JPG mất dữ liệu phù hợp cho ảnh chụp, WebP được đề xuất cho trình duyệt hiện đại, SVG vector phù hợp cho biểu tượng và logo.

**Bảo mật giải mã:** Tất cả các thao tác giải mã được thực hiện trong trình duyệt bằng JavaScript (dựa trên `atob()` + `TextDecoder` hoặc API `Blob`), dữ liệu nhị phân ảnh không được tải lên bất kỳ máy chủ nào. Chuỗi Base64 chứa thông tin nhạy cảm (như ảnh đại diện người dùng, ảnh chụp màn hình nội bộ) có thể sử dụng một cách an toàn, tất cả dữ liệu sẽ tự động bị xóa sau khi đóng trang.

Trường hợp sử dụng

  • Khôi phục dữ liệu ảnh Base64 trả về từ API thành tệp ảnh có thể xem trước và tải xuống
  • Kiểm tra xem tài nguyên ảnh nội tuyến frontend (định dạng Data URL) có được mã hóa chính xác không
  • Xác nhận nội dung Base64 có hoàn chỉnh không khi gỡ lỗi giao diện tải ảnh lên
  • Lưu ảnh Base64 thành tệp PNG/JPG cục bộ để sử dụng trong thiết kế hoặc tài liệu
  • Giải mã mã hóa Base64 tệp đính kèm email để khôi phục thành ảnh
  • Khôi phục ảnh Base64 thu thập từ web và lưu vào đĩa
  • Giải mã Data URL để kiểm tra hiệu ứng hiển thị thực tế của biểu tượng SVG
  • Khôi phục ảnh Base64 trả về từ giao diện OCR / AI thành tệp cục bộ để xem

Cách Sử dụng

  1. Dán dữ liệu ảnh đã mã hóa Base64 (hỗ trợ có hoặc không có tiền tố Data URL, ví dụ data:image/png;base64,iVBORw0KG...)
  2. Công cụ tự động phát hiện loại MIME và giải mã (nhận diện trong Data URL, hoặc dò tìm dựa trên tiêu đề nội dung)
  3. Bên phải hiển thị xem trước ảnh cùng thông tin kích thước tệp, kích thước ảnh theo thời gian thực
  4. Nhấp vào «Tải xuống» để lưu thành tệp ảnh cục bộ, hoặc nhấp chuột phải vào ảnh chọn «Lưu ảnh thành»
  5. Nếu giải mã thất bại, bạn có thể chỉ định loại MIME thủ công hoặc sử dụng công cụ Base64 Clean để tiền xử lý

Tính năng

  • Xem trước ảnh trực tuyến: sau khi giải mã hiển thị ảnh trực tiếp trong trình duyệt, không cần tải xuống cục bộ
  • Hỗ trợ đa định dạng: hỗ trợ 7+ loại MIME ảnh phổ biến như PNG / JPG / WebP / GIF / SVG / BMP / AVIF
  • Tự động nhận diện Data URL: tự động tách tiền tố data:image/png;base64,, trích xuất nội dung Base64 thuần để giải mã
  • Nhập Base64 thuần: hỗ trợ chuỗi Base64 thuần không có tiền tố, có thể chỉ định loại MIME
  • Tải xuống tệp ảnh: hỗ trợ lưu ảnh sau giải mã thành tệp PNG/JPG cục bộ chỉ với một cú nhấp
  • Thống kê ký tự thời gian thực: hiển thị số ký tự nhập, số byte sau giải mã theo thời gian thực, thuận tiện đánh giá kích thước ảnh
  • Phát hiện lỗi: khi giải mã thất bại thông báo vị trí lỗi cụ thể (ký tự Base64 không hợp lệ, độ dài không đúng, không khớp MIME)
  • Xử lý cục bộ không tải lên: tất cả giải mã và xem trước hoàn tất trong trình duyệt, không đi qua bất kỳ máy chủ nào
  • Tương thích ngược hoàn toàn: sử dụng kết hợp với công cụ «Ảnh sang Base64», tạo thành quy trình chuyển đổi hai chiều hoàn chỉnh

Ví dụ mã

JavaScript: Giải mã nguyên bản trình duyệt + xem trước Blob URL

javascript

Sử dụng API atob() + TextDecoder + Blob nguyên bản của trình duyệt để giải mã Base64 và hiển thị ảnh trong trình duyệt.

// Base64 → Ảnh (triển khai nguyên bản trình duyệt)
function base64ToImage(base64String, mimeType = 'image/png') {
  // 1. Loại bỏ tiền tố Data URL (nếu có)
  const clean = base64String.replace(/^data:image\/\w+;base64,/, '');

  // 2. Giải mã thành chuỗi nhị phân bằng atob() nguyên bản của trình duyệt
  const binary = atob(clean);

  // 3. Chuyển thành Uint8Array
  const bytes = new Uint8Array(binary.length);
  for (let i = 0; i < binary.length; i++) {
    bytes[i] = binary.charCodeAt(i);
  }

  // 4. Tạo Blob URL để xem trước bằng thẻ <img>
  const blob = new Blob([bytes], { type: mimeType });
  const url = URL.createObjectURL(blob);

  // 5. Đặt img.src là có thể xem trước
  const img = document.createElement('img');
  img.src = url;
  img.onload = () => {
    console.log(`Kích thước ảnh: ${img.width}x${img.height}`);
    console.log(`Kích thước tệp: ${bytes.byteLength} bytes`);
  };

  return { img, url, size: bytes.byteLength };
}

// Ví dụ sử dụng:
const result = base64ToImage('iVBORw0KGgoAAAANSUhEUgAAAAUA...');
document.body.appendChild(result.img);

// Giải phóng Blob URL (tránh rò rỉ bộ nhớ)
setTimeout(() => URL.revokeObjectURL(result.url), 60000);

Python: Giải mã bằng thư viện base64 và lưu ảnh

python

Thư viện chuẩn Python base64 giải mã dữ liệu Base64 thành luồng nhị phân ảnh, sau đó lưu bằng PIL/Pillow hoặc thao tác tệp tích hợp.

import base64
from pathlib import Path

def base64_to_image(base64_string: str, output_path: str, mime_type: str = 'image/png'):
    """Giải mã chuỗi Base64 và lưu thành tệp ảnh"""

    # 1. Loại bỏ tiền tố Data URL
    if base64_string.startswith('data:image'):
        # Định dạng: data:image/png;base64,iVBORw0...
        header, base64_string = base64_string.split(',', 1)
        # Tự động trích xuất MIME từ header
        if 'image/' in header:
            mime_type = header.split('data:')[1].split(';')[0]

    # 2. Giải mã
    image_bytes = base64.b64decode(base64_string)

    # 3. Lưu vào tệp
    output_file = Path(output_path)
    output_file.parent.mkdir(parents=True, exist_ok=True)
    output_file.write_bytes(image_bytes)

    print(f"✅ Đã lưu: {output_file}")
    print(f"   Kích thước tệp: {len(image_bytes):,} bytes")
    print(f"   Loại MIME: {mime_type}")

    return output_file


# Ví dụ sử dụng:
# 1. Chuỗi Base64 nhận được từ phản hồi API
api_base64_response = "iVBORw0KGgoAAAANSUhEUgAA..."

# 2. Giải mã và lưu
base64_to_image(api_base64_response, 'output/captcha.png')

# 3. Tùy chọn: Xử lý thêm bằng PIL
try:
    from PIL import Image
    img = Image.open('output/captcha.png')
    print(f"Kích thước ảnh: {img.size}")
    img.save('output/captcha.png', optimize=True)
except ImportError:
    print('Cài đặt Pillow để xử lý ảnh: pip install Pillow')

Java: Giải mã ảnh bằng java.util.Base64 + ImageIO

java

Thư viện chuẩn Java Base64 giải mã luồng nhị phân ảnh, kết hợp ImageIO / BufferedImage xử lý siêu dữ liệu ảnh.

import java.io.*;
import java.util.Base64;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;

public class Base64ToImage {
    public static void main(String[] args) throws Exception {
        String base64String = "iVBORw0KGgoAAAANSUhEUgAA...";
        String mimeType = "image/png";

        // 1. Loại bỏ tiền tố Data URL (nếu có)
        if (base64String.startsWith("data:image")) {
            int commaIdx = base64String.indexOf(',');
            String header = base64String.substring(0, commaIdx);
            base64String = base64String.substring(commaIdx + 1);
            // Trích xuất MIME từ header
            if (header.contains("image/")) {
                mimeType = header.substring(header.indexOf("data:") + 5, header.indexOf(";"));
            }
        }

        // 2. Giải mã Base64
        byte[] imageBytes = Base64.getDecoder().decode(base64String);

        // 3. Lưu vào tệp
        String extension = mimeType.substring("image/".length());
        File outputFile = new File("output." + extension);
        try (FileOutputStream fos = new FileOutputStream(outputFile)) {
            fos.write(imageBytes);
        }
        System.out.println("✅ Đã lưu: " + outputFile.getAbsolutePath());
        System.out.println("   Kích thước tệp: " + imageBytes.length + " bytes");

        // 4. (Tùy chọn) Đọc siêu dữ liệu ảnh
        ByteArrayInputStream bais = new ByteArrayInputStream(imageBytes);
        BufferedImage image = ImageIO.read(bais);
        if (image != null) {
            System.out.println("Kích thước ảnh: " + image.getWidth() + "x" + image.getHeight());
        }
    }
}

Câu hỏi Thường gặp

Hỗ trợ những định dạng ảnh nào?

Hỗ trợ tất cả các loại MIME ảnh mà trình duyệt nhận diện nguyên bản như PNG, JPG, WebP, GIF, SVG, BMP, AVIF, ICO, v.v. Công cụ sẽ tự động xác định dựa trên tiền tố MIME trong Data URL hoặc đặc điểm đầu vào, cũng có thể chỉ định loại MIME thủ công trên giao diện. Chọn định dạng chính xác đảm bảo trình duyệt giải mã và hiển thị đúng cách.

Đầu vào cần có tiền tố data:image/png;base64 không?

Không cần. Công cụ hỗ trợ hai định dạng đầu vào: ①Chuỗi Base64 thuần (ví dụ iVBORw0KGgoAA...), cần chọn loại MIME trên giao diện (như PNG / JPG); ②Định dạng Data URL (ví dụ data:image/png;base64,iVBORw0KGgo...), công cụ tự động nhận diện loại MIME trong tiền tố và giải mã. Cả hai cách nhập đều được hỗ trợ.

Có thể xem trước trực tiếp trong trình duyệt không?

Có thể. Ảnh sau khi giải mã sẽ được hiển thị trực tiếp trong trình duyệt thông qua Blob URL, hỗ trợ xem trước trực tuyến. Sau khi xác nhận nội dung chính xác, hãy tải xuống thành tệp cục bộ hoặc sao chép Data URL để nhúng vào HTML/CSS. Toàn bộ quá trình xem trước không yêu cầu yêu cầu mạng.

Khác biệt với công cụ Base64 sang tệp là gì?

Base64 sang ảnh được tối ưu hóa riêng cho định dạng ảnh: ①Tự động nhận diện loại MIME; ②Xem trước trực tiếp trong trình duyệt thông qua Blob URL; ③Tự động đặt phần mở rộng tệp theo MIME (.png / .jpg, v.v.); ④Hiển thị thông tin kích thước ảnh. Base64 sang tệp là công cụ đa năng, phù hợp cho khôi phục và tải xuống bất kỳ tệp nhị phân nào (như PDF, ZIP, âm thanh, v.v.).

Ảnh hiển thị không hoàn chỉnh sau khi giải mã phải làm sao?

Nguyên nhân có thể: ①Chuỗi Base64 bị cắt ngắn (kiểm tra độ dài có hoàn chỉnh không); ②Chỉ định sai loại MIME (ví dụ giải mã dữ liệu PNG dưới dạng JPG); ③Dữ liệu gốc đã bị hỏng. Khuyến nghị: ①Xác nhận Base64 nguồn hoàn chỉnh; ②Thử chuyển đổi các loại MIME khác nhau; ③Sử dụng công cụ Base64 Validate để kiểm tra tính hợp lệ.

Kích thước Base64 lớn hơn ảnh gốc bao nhiêu?

Mã hóa Base64 làm tăng kích thước dữ liệu nhị phân gốc khoảng 33% (3 byte → 4 ký tự). Ví dụ PNG 100KB sau khi mã hóa thành chuỗi Base64 khoảng 133KB. Vì vậy Base64 phù hợp cho ảnh nhỏ (< 10KB), ảnh lớn khuyến nghị sử dụng HTTP URL để truyền trực tiếp.

Có hỗ trợ ảnh vector SVG không?

Có hỗ trợ. SVG là định dạng ảnh vector dựa trên XML, sau khi mã hóa Base64 có thể nhúng trực tiếp vào HTML <img> hoặc CSS background-image. Sau khi giải mã sẽ được hiển thị theo cách vector trong trình duyệt, có thể phóng to thu nhỏ không mất dữ liệu. Lưu ý SVG có thể chứa mã JavaScript, cần chú ý bảo mật XSS khi sử dụng.

Làm thế nào để lưu theo định dạng chỉ định?

Sau khi giải mã nhấp vào nút tải xuống, công cụ sẽ tự động thêm phần mở rộng tương ứng theo loại MIME khi giải mã (image/png → .png, image/jpeg → .jpg). Nếu cần chuyển đổi định dạng (như PNG → JPG), khuyến nghị giải mã trước rồi sử dụng các công cụ khác (như Canvas / ImageMagick) để chuyển đổi.

Ảnh sau giải mã là trống hoặc bị hỏng?

Nguyên nhân phổ biến: ①Base64 chứa ký tự xuống dòng hoặc khoảng trắng chưa được làm sạch——hãy tiền xử lý bằng công cụ Base64 Clean trước; ②Thiếu padding (=)——công cụ này sẽ tự động bổ sung; ③Loại MIME không khớp với dữ liệu gốc——kiểm tra Content-Type trả về từ API nguồn hoặc thử các MIME khác thủ công; ④Base64 nguồn bị cắt ngắn trong quá trình truyền——lấy lại chuỗi hoàn chỉnh.

Có hỗ trợ ảnh lớn (>10MB) không?

Có hỗ trợ, nhưng hiệu suất hiển thị ảnh cực lớn của trình duyệt sẽ giảm. Giải mã Base64 10MB (khoảng 7.5MB ảnh gốc) thường mượt mà; vượt quá 50MB có thể xuất hiện cảnh báo bộ nhớ. Khuyến nghị: ①Sử dụng base64-clean để loại bỏ khoảng trắng trước; ②Giải mã ảnh lớn theo khối; ③Xác nhận bộ nhớ trình duyệt đủ (khuyến nghị 4GB+).

Xử lý sự cố

Ảnh hiển thị trống sau khi giải mã

Có thể loại MIME không khớp hoặc Base64 không hoàn chỉnh. Kiểm tra: 1) Tiêu đề Content-Type trả về từ API nguồn; 2) Chuyển đổi loại MIME thủ công và thử lại; 3) Xác nhận chuỗi Base64 hoàn chỉnh (độ dài đúng như dự kiến).

Giải mã thất bại InvalidCharacterError

Chuỗi Base64 chứa ký tự không hợp lệ (khoảng trắng, xuống dòng, ký tự có dấu, v.v.). Sử dụng công cụ Base64 Clean để loại bỏ tất cả khoảng trắng và ký tự không hợp lệ trước, sau đó mới chuyển đổi.

Phần mở rộng tệp ảnh tải xuống sai

Kiểm tra xem loại MIME khi giải mã có khớp với ảnh gốc không. Ví dụ API nguồn trả về image/jpeg nhưng dữ liệu Base64 thực tế là PNG, sau khi tải xuống phần mở rộng sẽ là .jpg nhưng định dạng thực tế là PNG. Khuyến nghị xác nhận định dạng gốc từ tiền tố MIME hoặc tiêu đề Content-Type.

Trình duyệt bị treo khi giải mã ảnh lớn

Chuỗi Base64 vượt quá 50MB có thể gây tràn bộ nhớ. Khuyến nghị: ①Sử dụng công cụ base64-clean để loại bỏ ký tự khoảng trắng trước; ②Giải mã ảnh lớn theo lô (ví dụ chia theo tile); ③Xác nhận bộ nhớ trình duyệt đủ (khuyến nghị bộ nhớ khả dụng 4GB+); ④Sử dụng script Node.js / Python phía máy chủ để xử lý ảnh cực lớn.

Ảnh SVG không thể hiển thị sau khi giải mã

SVG là định dạng vector dựa trên XML, sau khi giải mã phải đảm bảo: 1) Loại MIME sử dụng image/svg+xml; 2) SVG không được chứa ký tự đặc biệt chưa được escape; 3) Một số trình duyệt có hạn chế bảo mật đối với mã JavaScript trong SVG. Khuyến nghị sử dụng công cụ phân tích XML để xác minh tính hợp lệ của SVG trước.

Thuật ngữ

Base64
Phương thức mã hóa biểu diễn dữ liệu nhị phân bằng 64 ký tự ASCII, được định nghĩa trong RFC 4648. Công cụ này thực hiện chiều ngược lại: khôi phục chuỗi Base64 thành ảnh nhị phân ban đầu.
Data URL
Định dạng URL nội tuyến được định nghĩa trong RFC 2397: data:image/<MIME>;base64,<dữ liệu>. Có thể sử dụng trực tiếp trong HTML img src, CSS background-image. Công cụ này tự động nhận diện và tách tiền tố.
Loại MIME
Loại phương tiện internet, ví dụ image/png, image/jpeg. Trình duyệt dựa vào MIME để quyết định cách phân tích luồng byte thành ảnh.
PNG
Định dạng ảnh bitmap nén không mất dữ liệu, hỗ trợ kênh trong suốt. Thường dùng cho biểu tượng, ảnh chụp màn hình, ảnh cần giữ lại chi tiết. Kích thước sau Base64 khoảng 1,33 lần so với bản gốc.
JPG/JPEG
Định dạng ảnh bitmap nén mất dữ liệu, phù hợp cho ảnh chụp. Tỷ lệ nén cao nhưng không hỗ trợ trong suốt. Kích thước sau Base64 khoảng 1,33 lần so với bản gốc.
WebP
Định dạng ảnh hiện đại do Google phát triển, đồng thời hỗ trợ nén mất dữ liệu/không mất dữ liệu và kênh trong suốt. Nhỏ hơn PNG/JPG 25-35%.
Blob (Binary Large Object)
Đối tượng nhị phân nguyên bản của trình duyệt, có thể đóng gói luồng byte sau khi giải mã Base64 thành Blob URL ảnh để xem trước và tải xuống.

Bảng so sánh 8 định dạng ảnh

Các định dạng ảnh khác nhau có thuật toán nén, đặc tính và tình huống áp dụng khác nhau.

Định dạngLoại MIMELoại nénHỗ trợ trong suốtTình huống điển hình
PNGimage/pngKhông mất dữ liệuBiểu tượng / Ảnh chụp / Logo
JPGimage/jpegMất dữ liệuẢnh chụp / Ảnh phong cảnh
WebPimage/webpMất/không mất dữ liệuĐề xuất cho Web hiện đại
GIFimage/gifKhông mất dữ liệu (256 màu)✅ (1-bit)Hoạt ảnh nhỏ / Biểu tượng đơn giản
SVGimage/svg+xmlVectorLogo / Biểu tượng / Minh họa
BMPimage/bmpKhôngTùy chọnẢnh hệ thống Windows
AVIFimage/avifMất/không mất dữ liệuĐịnh dạng ảnh thế hệ tiếp theo
ICOimage/x-iconKhông mất dữ liệuFavicon trang web

So sánh tải ảnh Data URL và HTTP URL

Ảnh sau giải mã có thể được nhúng trực tiếp vào HTML/CSS dưới dạng Data URL, so sánh với HTTP URL truyền thống.

ChiềuData URLHTTP URL
Số yêu cầu HTTP01 lần
Tái sử dụng bộ đệmKhóDễ (CDN / trình duyệt)
Kích thướcẢnh gốc + 33%Kích thước ảnh gốc
Kích thước phù hợp< 10 KBMọi kích thước
Truyền nénKhông (đã mã hóa)gzip / Brotli
Hạn chế CSPCó thểThường cho phép
Lưu trữ máy chủKhông cầnCần
Truy cập ngoại tuyến✅ (cấp tệp)❌ (cần bộ đệm)

Bảng tra cứu 5 lỗi phổ biến khi chuyển Base64 sang ảnh

Khi gặp lỗi giải mã, hãy xác định vấn đề nhanh chóng theo bảng dưới đây.

Hiện tượng lỗiNguyên nhân có thểCách khắc phục
Giải mã thất bại: InvalidCharacterErrorChứa khoảng trắng, xuống dòng, ký tự không phải Base64Tiền xử lý bằng công cụ Base64 Clean
Ảnh hiển thị trốngLoại MIME không khớp với dữ liệu gốcChuyển sang MIME đúng (ví dụ dữ liệu PNG dùng image/png)
Ảnh hiển thị không hoàn chỉnhChuỗi Base64 bị cắt ngắnLấy lại chuỗi Base64 hoàn chỉnh
Lỗi PaddingBase64 an toàn với URL bỏ qua paddingBổ sung = bằng công cụ Base64 Padding
Tràn bộ nhớ trình duyệtẢnh quá lớn (> 50MB)Giải mã theo khối hoặc sử dụng công cụ nén ảnh

Authoritative References