Vì sao ảnh lại bị nằm nghiêng
Cảm biến máy ảnh luôn ghi hình theo cùng một chiều. Khi bạn xoay điện thoại sang chiều dọc, hầu hết máy ảnh không xoay các điểm ảnh; chúng lưu điểm ảnh theo chiều ngang và thêm một thẻ EXIF nhỏ ghi rằng "hãy hiển thị ảnh này xoay 90 độ". Ứng dụng đọc thẻ này sẽ hiển thị ảnh đúng chiều, còn ứng dụng bỏ qua nó sẽ hiển thị ảnh nằm nghiêng. Đó là lý do một bức ảnh trông bình thường trong thư viện ảnh nhưng lại sai chiều sau khi tải lên một website, đính kèm vào ứng dụng email cũ hoặc chèn vào tài liệu.
Những trường hợp phổ biến khác:
- Bản quét và ảnh chụp tài liệu từ trên xuống, khi điện thoại không xác định được đâu là phía trên.
- Ảnh chụp màn hình hoặc tệp xuất ra cần ở chiều ngang cho slide hoặc bố cục in.
- Ảnh selfie bị camera trước lật gương, khiến chữ ở hậu cảnh bị đọc ngược.
Cách xoay và lật hoạt động ở đây
Công cụ giải mã từng ảnh trong một worker chạy nền ngay trong trình duyệt, vẽ ảnh lên canvas với phép biến đổi đã chọn rồi mã hóa lại. Trình duyệt hiện đại áp dụng thẻ hướng EXIF khi giải mã, nên góc bạn chọn được tính theo cách ảnh hiển thị trong trình duyệt, không theo dữ liệu thô từ cảm biến.
- 90° xoay ảnh một phần tư vòng theo chiều kim đồng hồ. Chiều rộng và chiều cao đổi chỗ cho nhau, nên ảnh 4000 x 3000 thành 3000 x 4000.
- 180° lộn ngược ảnh; kích thước giữ nguyên.
- 270° là một phần tư vòng ngược chiều kim đồng hồ.
- 0° giữ nguyên góc, đúng thứ bạn cần khi chỉ muốn có ảnh phản chiếu.
Hai thao tác lật tạo ảnh phản chiếu: Lật ngang đổi chỗ trái và phải, Lật dọc đổi chỗ trên và dưới. Lật không giống với xoay. Xoay 180° giữ chữ vẫn đọc được nhưng bị lộn ngược; lật dọc thì còn làm chữ bị đọc ngược nữa. Kết hợp cả hai kiểu lật cho kết quả giống hệt xoay 180°.
Khi bạn đặt cùng lúc một góc Xoay và một kiểu lật, phép lật được áp dụng trước lên ảnh như bạn đang thấy, sau đó kết quả mới được xoay. Nếu một tổ hợp không ra như mong đợi, hãy thử kiểu lật còn lại; với góc xoay 90° hoặc 270°, lật ngang và lật dọc đổi vai trò cho nhau về mặt hình ảnh.
Chất lượng và dung lượng tệp
Bản thân việc xoay điểm ảnh không làm mất dữ liệu, nhưng việc lưu kết quả thì có thể:
- PNG là định dạng không mất dữ liệu, nên tệp PNG sau khi xoay chứa chính xác các điểm ảnh cũ theo thứ tự mới. Độ trong suốt được giữ nguyên.
- JPG và WebP được mã hóa lại ở chất lượng 92%. Với ảnh chụp, mắt thường không phân biệt được với bản gốc, nhưng đây vẫn là một lượt nén mới, nên tránh xoay đi xoay lại cùng một tệp JPG nhiều lần. Hãy chọn hướng cuối cùng và làm trong một bước.
Dung lượng tệp đầu ra thường khác với đầu vào. Máy ảnh thường lưu JPG ở chất lượng 95% hoặc cao hơn, nên bản xoay ở 92% có xu hướng nhỏ hơn một chút. Ngược lại, một tệp JPG đã bị nén mạnh từ ứng dụng nhắn tin có thể lớn lên đôi chút, vì bộ mã hóa không cố khớp với thiết lập của bản gốc.
Siêu dữ liệu về hướng sau khi xoay
Vì ảnh được mã hóa lại từ canvas, tệp đã xoay được ghi ra mà không có siêu dữ liệu EXIF. Các điểm ảnh giờ đã đúng thứ tự, nên không còn thẻ hướng nào để bị hiểu sai và ảnh trông giống nhau trong mọi trình xem, biểu mẫu tải lên và tài liệu.
Bước này cũng loại bỏ phần siêu dữ liệu còn lại: mẫu máy ảnh, ngày chụp và vị trí GPS nếu điện thoại có ghi lại. Điều này thường có lợi cho quyền riêng tư khi đăng ảnh công khai, nhưng nếu bạn cần giữ ngày chụp để sắp xếp thư viện ảnh, hãy xoay một bản sao thay vì bản gốc. Để xem ảnh chứa những thông tin gì trước hoặc sau khi xoay, hãy dùng công cụ xem EXIF.
Mẹo thực tế
- Đặt góc xoay và kiểu lật trước khi thả tệp vào. Thiết lập được áp dụng cho mọi tệp thêm vào sau đó, nên bạn có thể xử lý cả thư mục bản quét chiều dọc trong một lần và tải về dưới dạng ZIP.
- Phân loại lô ảnh lẫn lộn trước. Nếu một số ảnh cần xoay 90° và số khác cần 270°, hãy chạy thành hai lô thay vì sửa từng ảnh một.
- Với trang quét, hãy xoay trước, rồi cắt bớt lề bằng công cụ cắt ảnh, vì cắt sẽ dễ hơn khi trang đã đúng chiều.
- Xoay video là một việc khác, vì mọi khung hình đều phải được mã hóa lại; hãy dùng công cụ xoay video cho những clip quay sai hướng.
Đầu ra giữ nguyên tên tệp và định dạng gốc, nên tệp IMG_2041.jpg sau khi xoay được tải về với tên IMG_2041.jpg. Nếu bạn tải về cùng thư mục, trình duyệt thường sẽ thêm một con số để tránh ghi đè lên bản gốc.