Chuyển đổi Base64 sang PNG

Biến văn bản Base64 thành một tệp PNG thực sự. Dán chuỗi thuần hoặc URI data:image/png;base64, xem trước cùng độ trong suốt, rồi lưu nguyên trạng hoặc chuyển các định dạng ảnh khác sang PNG.

Chạy hoàn toàn trong trình duyệt của bạn. Không có gì được tải lên.

Cách sử dụng

  1. Dán chuỗi Base64 hoặc toàn bộ URI data:image/png;base64.
  2. Kiểm tra bản xem trước. Các vùng trong suốt hiển thị trên nền ô bàn cờ.
  3. Giữ PNG ở mục Tải xuống dạng. Nếu dữ liệu là JPEG, WebP hoặc định dạng khác, ảnh sẽ được chuyển sang PNG ngay trong trình duyệt của bạn.
  4. Tải xuống tệp .png.

PNG dạng Base64 đến từ đâu

PNG là định dạng bạn dễ gặp nhất ở dạng Base64. Gọi canvas.toDataURL() không kèm đối số sẽ trả về một data URI PNG. Các công cụ tự động hóa trình duyệt trả ảnh chụp màn hình về dưới dạng PNG Base64, chẳng hạn page.screenshot({ encoding: 'base64' }) trong Puppeteer hoặc get_screenshot_as_base64() trong Selenium. Các trình vẽ biểu đồ, công cụ tạo mã QR và API tạo ảnh thường trả về ảnh dưới dạng một trường Base64 bên trong JSON.

Chuỗi PNG rất dễ nhận ra: nó luôn bắt đầu bằng iVBORw0KGgo, là dạng mã hóa của chữ ký PNG 8 byte bắt đầu bằng 89 50 4E 47. Theo sau là AAAANSUhEUg, phần mở đầu của khối IHDR chứa chiều rộng và chiều cao.

Chuỗi sao chép từ JSON cần được kiểm tra nhanh trước. Ví dụ, hàm json_encode của PHP mặc định thoát dấu gạch chéo, nên ảnh PNG từ một API viết bằng PHP có thể chứa các chuỗi \/. Hãy thay chúng bằng / và bỏ dấu ngoặc kép bao quanh trước khi dán.

Vì sao nên lưu dưới dạng PNG

PNG nén mà không làm mất chi tiết nào và lưu kênh alpha đầy đủ, nên bóng đổ mềm và các cạnh khử răng cưa vẫn còn nguyên. Điều đó khiến PNG trở thành lựa chọn tự nhiên cho ảnh chụp màn hình, thành phần giao diện, sơ đồ và mọi thứ có chứa chữ. Với ảnh chụp, JPG hoặc WebP cho tệp nhỏ hơn nhiều.

Chuyển JPEG hoặc WebP sang PNG giữ đúng những gì hiển thị trên màn hình, nhưng không thể khôi phục chi tiết mà quá trình nén mất dữ liệu đã loại bỏ, và tệp PNG thường lớn hơn tệp nguồn.

Lưu PNG Base64 bằng mã

# Python
import base64
with open('screenshot.png', 'wb') as f:
    f.write(base64.b64decode(b64_string))

// Trình duyệt: data URI sang Blob, không cần tự giải mã
const blob = await (await fetch(dataUri)).blob();
const url = URL.createObjectURL(blob);

Cần chiều ngược lại? PNG sang Base64 mã hóa một tệp thành chuỗi hoặc data URI.

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

Làm sao biết một chuỗi Base64 có phải PNG không?
Dữ liệu PNG luôn bắt đầu bằng iVBORw0KGgo. Công cụ cũng đọc trực tiếp các byte chữ ký, nên báo đúng định dạng thực ngay cả khi data URI ghi khác.
Chuyển sang PNG có làm giảm chất lượng không?

Không. PNG không mất dữ liệu, nên các điểm ảnh được lưu đúng như trình duyệt đã giải mã. Mất mát duy nhất chỉ có thể là mất mát đã xảy ra sẵn trong tệp nguồn.

Độ trong suốt có được giữ lại không?

Có. Đầu ra PNG giữ kênh alpha đầy đủ. Đầu ra JPEG tô trắng các vùng trong suốt, còn đầu ra GIF biến mỗi điểm ảnh thành hoặc trong suốt hoàn toàn, hoặc mờ đục hoàn toàn.

Data URI PNG của tôi hiển thị ảnh lỗi. Vấn đề là gì?
Thường là do chuỗi đã bị cắt mất một phần. Ô bảng tính (Excel dừng ở 32.767 ký tự), dòng nhật ký và cột cơ sở dữ liệu thường cắt cụt các giá trị dài. Ngoài ra, hãy bỏ dấu ngoặc kép bao quanh và các ký tự thoát JSON như \/ trước khi dán.