Java сохранить изображение CMYK в файл - PullRequest
1 голос
/ 10 марта 2011

Я пытаюсь создать изображение в цветовом пространстве CMYK и после работы с ним, например, рисование линий и т. Д., Сохранить его в файл. К сожалению, в интернете не так много информации о CMYK в java. Я нашел только статью http://carback.us/rick/blog/?p=58. Но там изображение сохраняется в PDF, используя библиотеку iText. Но мне нужно, чтобы он был сохранен в PNG или JPEG-файл. Вот код:

public BufferedImage createCMYKBufferedImage(double l_width, double l_height) {
    ColorSpace colorSpace = SimpleCMYKColorSpace.getInstance();
    ComponentColorModel l_ccm = new ComponentColorModel(colorSpace, false, false,
                            1, DataBuffer.TYPE_FLOAT);
    int[] l_bandoff = {0, 1, 2, 3}; //Index for each color (C, is index 0, etc)
    PixelInterleavedSampleModel l_sm = new PixelInterleavedSampleModel(
                               DataBuffer.TYPE_FLOAT,
                               (int)l_width, (int)l_height,
                                   4,(int)l_width*4, l_bandoff);
    WritableRaster l_raster = WritableRaster.createWritableRaster(l_sm,
            new Point(0, 0));
    return new BufferedImage(l_ccm, l_raster, false, null);
}

Когда я пытаюсь сохранить изображение, я просто звоню

ImageIO.write (изображение, формат, файл);

Кто-нибудь может мне помочь?

Ответы [ 2 ]

1 голос
/ 10 марта 2011

Чтобы записать BufferedImage в виде Jpeg:

Сначала преобразуйте BufferedImage в байтовый массив Jpeg.

import com.sun.image.codec.jpeg.ImageFormatException;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageDecoder;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public static byte[] jpegToBytes(BufferedImage image) {
    ByteArrayOutputStream os = new ByteArrayOutputStream();
    JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(os);
    JPEGEncodeParam jparm = encoder.getDefaultJPEGEncodeParam(image);
    jparm.setQuality(1F, false);

    try {
        encoder.encode(image, jparm);
        os.close();
    } catch (IOException e) {
        EclipseLogging.logError(RabidPhotoPlugin.getDefault(),
                RabidPhotoPlugin.PLUGIN_ID, e);
        return new byte[0];
    }
    return os.toByteArray();
}

Затем запишите байтовый массив в файл.

public static void writePhoto(byte[] photo) {
    try {
        OutputStream os = new FileOutputStream('file name');
        os.write(photo);
        os.flush();
        os.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
0 голосов
/ 17 ноября 2011

Кажется, у вас возникли разногласия в этом вопросе. Jpeg и PNG имеют формат изображения RGB. Например, посмотрите http://forums.adobe.com/message/2704225. Таким образом, вы должны поместить исходное изображение непосредственно в png / jpeg или распечатать CMYK в pdf. CMYK - это формат печати, а не экран.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...