Tôi đang cố gắng chuyển đổi hình ảnh (url bên dưới) bằng hai thư viện (thumbnailator và imgscalr. Mã của tôi hoạt động trên hầu hết các hình ảnh ngoại trừ một số sau khi chuyển đổi có một màu hồng/đỏ màuMàu hồng/Đỏ nhạt trong khi thay đổi kích thước hình ảnh jpeg bằng cách sử dụng hình thu nhỏ java hoặc imgscalr
tôi cố gắng để hiểu được nguyên nhân và tôi hoan nghênh bất cứ đề nghị
Note -.. loại ảnh của hình ảnh này là 5 ví dụ BufferedImage.TYPE_3BYTE_BGR và tôi đang sử dụng Java
Sử dụng Thumbnailator
Thumbnails.of(fromDir.listFiles())
.size(thumbnailWidth, thumbnailHeight)
.toFiles(Rename.SUFFIX_HYPHEN_THUMBNAIL);
Sử dụng imgscalr
BufferedImage bufferedImage = ImageIO.read(file);
final BufferedImage jpgImage;
LOG.debug("image type is =[{}] ", bufferedImage.getType());
BufferedImage scaledImg = Scalr.resize(bufferedImage, Method.ULTRA_QUALITY, thumbnailWidth, thumbnailHeight, Scalr.OP_ANTIALIAS);
File thumbnailFile = new File(fromDirPath + "/" + getFileName(file.getName()) +THUMBNAIL_KEYWORD + ".png");
ImageIO.write(scaledImg, getFileExtension(file.getName()), thumbnailFile);
bufferedImage.flush();
scaledImg.flush();
tôi nghĩ rằng vấn đề là JPEGImageReader hiểu sai dữ liệu JPEG, và giả định nó là RGB, chứ không phải là YCbCr (đó là những gì nó thực sự là). Điều gì sẽ xảy ra nếu bạn cố gắng hiển thị, hoặc viết (như PNG, không mở rộng) 'bufferedImage' từ mã imgscalr ở trên? Nó vẫn có vẻ không chính xác? Hay nó chỉ xảy ra sau khi chia tỷ lệ/lưu trữ dưới dạng JPEG? – haraldK
@haraldK - Màu tương tự. – user749665
Tôi khuyên bạn nên thử [JPEG plugin cho ImageIO] (https://github.com/haraldk/TwelveMonkeys#jpeg). Nó thường làm một công việc tốt hơn so với mặc định 'JPEGImageReader', khi xác định không gian màu đầu ra. Một trong những thư viện được đề cập đã được đóng gói sẵn với phiên bản cũ hơn của plugin của tôi, đảm bảo bạn nhận được phiên bản mới nhất, vì phiên bản kèm theo có lỗi liên quan đến vấn đề này. – haraldK