đầu tiên tôi muốn giải thích tình hình/yêu cầu mà dẫn đến câu hỏi:tinh khiết Java thay thế cho JAI ImageIO để phát hiện các hình ảnh CMYK
Trong ứng dụng web của chúng tôi, chúng tôi không thể hỗ trợ các hình ảnh CMYK (JPEG) kể từ IE 8 và dưới đây không thể hiển thị chúng. Vì vậy, chúng tôi cần phát hiện khi ai đó muốn tải lên một hình ảnh như vậy và từ chối nó.
Thật không may, ImageIO của Java sẽ không đọc những hình ảnh đó hoặc sẽ không cho phép tôi nhận được không gian màu được phát hiện. Từ gỡ lỗi có vẻ như JPEGImageReader
nội bộ nhận được mã vùng màu 11 (có nghĩa là JCS_YCCK
) nhưng tôi không thể truy cập thông tin đó một cách an toàn.
Khi truy vấn trình đọc cho các loại hình ảnh, tôi không nhận được gì cho CMYK, vì vậy tôi có thể giả định no image types = unsupported image
.
Tôi đã chuyển đổi hình ảnh CMYK nguồn thành RGB bằng công cụ hình ảnh để kiểm tra xem nó có thể đọc được không (tôi đã cố gắng mô phỏng các bước của quản trị viên khi nhận được thông báo "Không hỗ trợ CMYK"). Tuy nhiên, JPEGImageReader
sẽ không đọc hình ảnh đó vì nó giả định (chú thích trong nguồn!) Không gian màu RGB 3 thành phần nhưng tiêu đề hình ảnh báo cáo 4 thành phần (có thể là RGBA hoặc ARGB) và do đó IllegalArgumentException
bị ném. Vì vậy, ImageIO không phải là một lựa chọn vì tôi không thể nhận được không gian màu của hình ảnh một cách đáng tin cậy và tôi không thể nói cho quản trị viên biết tại sao một hình ảnh khác tốt (nó có thể được hiển thị bởi trình duyệt) sẽ không được chấp nhận do một số lỗi nội bộ.
Điều này đã khiến tôi thử JAI ImageIO có công việc tuyệt vời và đọc chính xác tất cả hình ảnh thử nghiệm của tôi.
Tuy nhiên, vì chúng tôi đang triển khai ứng dụng của mình trong JBoss có thể lưu trữ các ứng dụng khác, chúng tôi muốn giữ chúng càng tách biệt càng tốt. AFAIK, tôi cần phải cài đặt JAI ImageIO vào JRE hoặc làm cho các libs sẵn có để sử dụng chúng, và do đó các ứng dụng khác có thể truy cập chúng, điều này có thể gây ra các tác dụng phụ (ít nhất chúng ta có để kiểm tra rất nhiều để đảm bảo đó không phải là trường hợp).
Đó là giải thích cho câu hỏi và tại đây lại xuất hiện: Có bất kỳ thay thế Java thuần túy nào cho JAI ImageIO phát hiện và chuyển đổi hình ảnh CMYK một cách đáng tin cậy không?
Cảm ơn trước,
Thomas
Tôi gặp vấn đề tương tự với hình ảnh JPEG JAI và CMYK. Bạn có sử dụng phương pháp đó đã được sản xuất? Trải nghiệm của bạn thế nào? Tôi đoán bạn sử dụng 'Sanselan.getImageInfo (...). GetColorType() == ImageInfo.COLOR_TYPE_CMYK' ([ImageInfo] (http://commons.apache.org/sanselan/api-release/org/apache/sanselan /ImageInfo.html)) để kiểm tra xem đó có phải là hình ảnh CMYK không? –
@bene Có, trước tiên chúng tôi kiểm tra xem Sanselan có tìm thấy hồ sơ ICC không và nếu có thì hãy dùng loại không gian màu của nó nhưng nếu không, chúng tôi sử dụng 'ImageInfo.getColorType()'. Chúng tôi đang sử dụng điều này trong sản xuất và không có bất kỳ vấn đề cho đến nay, tuy nhiên, tôi phải thừa nhận rằng chúng tôi hiện đang không xử lý nhiều hình ảnh. Trong tương lai, chúng tôi sẽ có cơ sở dữ liệu phương tiện truyền thông của riêng chúng tôi sẽ xử lý hàng ngàn hình ảnh và sau đó chúng tôi sẽ có thông tin đáng tin cậy hơn về sự sẵn sàng sản xuất của phương pháp đó. Chỉ cần một mặt lưu ý: chuyển đổi CMYK Tiffs sản xuất một số màu sắc đáng chú ý và chúng tôi đã không quản lý để thoát khỏi điều đó được nêu ra. – Thomas
Hôm nay tôi nhấn một hình ảnh mà ICCProfile của Sanselan có ColorSpaceType CMYK trong khi ColorType của ImageInfo là RGB. Không gian màu thực sự là RGB. Tự hỏi nếu bạn có cùng một vấn đề. –