Ảnh điện thoại sang PDF: vì sao tệp nặng khủng khiếp và một trang bị xoay ngang
Ảnh sang PDF đặt mỗi ảnh lên một trang ở đúng kích thước điểm ảnh gốc, nên ba ảnh JPEG cỡ điện thoại 3,2 MB thành một PDF 41,5 MB, và một ảnh chân dung ra trên trang ngang. Hãy thu nhỏ ảnh trước khi chuyển đổi, rồi xoay trang bị ngang sau đó.
Ảnh sang PDF biến các tệp JPEG, PNG, GIF hoặc BMP thành một PDF, mỗi ảnh một trang, theo thứ tự tải lên. Nó không thu nhỏ gì cả, và bỏ qua cờ xoay mà điện thoại ghi vào ảnh chân dung. Trong một lần chạy thử, ba tệp JPEG 3,2 MB thành một PDF 41,5 MB, và một ảnh được gắn cờ chân dung rơi vào một trang ngang. Hãy thu nhỏ ảnh trước khi tải lên, rồi sửa trang bị ngang sau đó bằng Xoay PDF.
Ví dụ thực tế
Đầu vào là ba ảnh JPEG 4032 × 3024 điểm ảnh, mỗi ảnh khoảng 3,2 MB (tổng 9,7 MB), đúng kích thước điểm ảnh của một khung hình camera điện thoại thông thường. Đó là các ảnh tổng hợp có nhiễu mịn, nên nén kém hơn hầu hết ảnh thật; hãy coi mọi kích thước dưới đây là một lần chạy ngày 2026-10-04 trên máy chủ cục bộ dựng từ mã nguồn hiện tại, không phải lời hứa. Yêu cầu là:
curl -s -o IMG_0001.pdf \
-F fileInput=@IMG_0001.jpg -F fileInput=@IMG_0002.jpg -F fileInput=@IMG_0003.jpg \
https://pdf123.xyz/api/v1/convert/img/pdf
| Bước | Kết quả |
|---|---|
| 3 ảnh JPEG, 4032 × 3024 px | tổng 9,7 MB |
| Ảnh sang PDF | 3 trang, 41,5 MB, mỗi trang 4032 × 3024 pt |
| Nén PDF trên PDF đó | 39,9 MB, nhỏ hơn khoảng 4% |
| Cùng 3 ảnh được thu nhỏ về 1600 px ở cạnh dài trước | tổng 1,7 MB |
| Ảnh sang PDF trên các ảnh đã thu nhỏ | 3 trang, 6,2 MB, mỗi trang 1600 × 1200 pt |
| Nén PDF trên PDF đó | 6,2 MB, không nhỏ hơn |
Đầu ra được đặt tên theo tệp đầu tiên, nên tệp tải về ở trên là IMG_0001.pdf.
Vì sao 10 MB ảnh thành 41 MB
JPEG lưu ảnh dưới dạng các khối nén có mất dữ liệu. Ảnh sang PDF không chép các byte đó vào PDF. Nó giải mã từng ảnh, chuyển sang RGB 8 bit, và lưu các điểm ảnh thô bằng nén Flate không mất dữ liệu. Một khung hình 4032 × 3024 là 36,6 triệu byte RGB (4032 × 3024 × 3). Flate đưa con số đó xuống khoảng 13,8 MB mỗi trang ở đây, vẫn gấp hơn bốn lần tệp JPEG gốc. Chín bản sao của cùng ba ảnh tạo ra một PDF 124,6 MB.
Điều đó cũng giải thích các dòng Nén PDF. Nén PDF nén lại các stream và gói các đối tượng; nó không giảm mẫu hay mã hóa lại ảnh. Các điểm ảnh vốn đã được nén Flate, nên còn rất ít để loại bỏ (vì sao). Cách để có tệp nhỏ hơn là giảm số điểm ảnh trước khi PDF được tạo.
Còn một chi phí thứ hai. Mỗi trang lấy kích thước của ảnh của nó, một điểm ảnh ứng với một point, nên một ảnh 4032 điểm ảnh tạo ra trang rộng 56 inch. Trình xem co nó vừa cửa sổ và máy in thu nó theo khổ giấy, nhưng các khung trang không phải A4 hay Letter. Biểu mẫu không có tùy chọn nào cho khổ giấy, cách vừa trang, kiểu màu hay tự xoay, và máy chủ không đọc các trường API fitOption, colorType hay autoRotate.
Thu nhỏ trước, rồi chuyển đổi
Hãy đổi kích thước ảnh trước khi tải lên. Trên Mac, sips -Z 1600 IMG_0001.jpg --out small1.jpg làm được việc đó. Với ImageMagick trên bất kỳ hệ thống nào:
magick IMG_0001.jpg -resize 1600x1600 -quality 85 small1.jpg
Cả hai đều biến ảnh 4032 × 3024 thành 1600 × 1200. Trong lần chạy này, ba tệp JPEG giảm từ 9,7 MB xuống 1,7 MB và PDF ba trang từ 41,5 MB xuống 6,2 MB. Trên một tờ Letter, 1600 điểm ảnh trải trên 11 inch là khoảng 145 dpi: đủ đọc với một biểu mẫu được chụp ảnh, nhưng thô với chữ nhỏ. Hãy chọn kích thước theo chữ nhỏ nhất bạn cần đọc, đừng chỉ theo mục tiêu dung lượng tệp.
Kích thước quan trọng hai lần vì các công cụ tiếp theo cũng có trần. Thân của một yêu cầu đơn lẻ bị giới hạn ở 100 MiB. PDF 124,6 MB ở trên bị từ chối với mã 413 (payload_too_large) khi gửi đến Nén PDF. Xem Khi tệp PDF lớn tải lên bị từ chối để biết cách vượt qua.
Trang bị xoay ngang
Nhiều điện thoại lưu ảnh chân dung dưới dạng điểm ảnh ngang và thêm thẻ hướng EXIF bảo trình xem xoay nó. Các ứng dụng ảnh thường tuân theo thẻ này. Ảnh sang PDF thì không đọc nó: một ảnh JPEG 1600 × 1200 gắn hướng 6 (xoay 90° theo chiều kim đồng hồ) tạo ra một trang ngang 1600 × 1200.
Cách sửa là Xoay PDF: nhập số trang, ở đây là 1, và góc 90. Kết quả có /Rotate 90 được đặt trên trang đó, nên trình xem hiển thị nó thẳng đứng. Dùng 270 cho ảnh gắn thẻ theo hướng ngược lại (hướng 8) và 180 cho ảnh bị lộn ngược (hướng 3); ở đây chỉ hướng 6 được thử. Xoay PDF đặt một góc tuyệt đối cho trang chứ không cộng thêm vào góc hiện tại, và không mã hóa lại ảnh. Nếu bạn không muốn sửa từng trang một, hãy xoay ảnh trong ứng dụng ảnh và lưu một bản sao trước khi chuyển đổi.
Những gì công cụ này sẽ từ chối
- HEIC và các định dạng khác. Trang chấp nhận
.png,.jpg,.jpeg,.gifvà.bmp. Một tệp HEIC thật trả về 400,unsupported_file_type; hãy xuất nó sang JPEG trước. - Tệp không phải ảnh. Tải một PDF lên endpoint này trả về cùng mã 400 với thông báo "The file is not a supported image."
- SVG. Một tệp SVG cũng nhận mã 400 đó.
- Chữ tìm kiếm được. Chữ trong một trang được chụp ảnh vẫn là điểm ảnh. OCR sang Markdown trả về văn bản Markdown; nó không thêm lớp chữ vào PDF này (cách hoạt động).
- Độ trong suốt. Ảnh được chuyển sang RGB và kênh alpha bị bỏ.
Kiểm tra trước khi gửi
Mở PDF và đếm số trang so với các ảnh, theo thứ tự. Thứ tự trang là thứ tự tải lên; trong một lần thử, tải lên một ảnh PNG chân dung trước một ảnh ngang cho ra trang chân dung trước. Sau đó xem dung lượng tệp trước khi đính kèm.