Java中图像的组合重缩放和颜色缩减?

Java中图像的组合重缩放和颜色缩减?,java,graphics,image-manipulation,imagemagick,java-2d,Java,Graphics,Image Manipulation,Imagemagick,Java 2d,给定一个矩形输入图像,我想用最多10种颜色创建一个40x40像素的输出图像。因此,需要的两个操作是重新缩放和颜色减少 下面的ImageMagick命令执行以下操作: convert input.png -scale 40x40 -colors 10 output.png 如何在Java中实现相应的结果 向ImageMagick抛售不是一个选项:-)在JAI.dev.Java.net上查找Java高级图像(JAI)在JAI.dev.Java.net上查找Java高级图像(JAI)使用JAI可以实

给定一个矩形输入图像,我想用最多10种颜色创建一个40x40像素的输出图像。因此,需要的两个操作是重新缩放和颜色减少

下面的ImageMagick命令执行以下操作:

convert input.png -scale 40x40 -colors 10 output.png
如何在Java中实现相应的结果


向ImageMagick抛售不是一个选项:-)

在JAI.dev.Java.net上查找Java高级图像(JAI)

在JAI.dev.Java.net上查找Java高级图像(JAI)

使用JAI可以实现类似的功能:

    // now resize the image
    ParameterBlock pb = new ParameterBlock();
    pb.addSource(image); // The source image
    pb.add(wScale); // The xScale
    pb.add(hScale); // The yScale
    pb.add(0.0F); // The x translation
    pb.add(0.0F); // The y translation

    RenderingHints hints = new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);           
    RenderedOp resizedImage = JAI.create("SubsampleAverage", pb, hints);

    // lastly, write the newly-resized image to an
    // output stream, in a specific encoding
    try
    {
            FileOutputStream fos = new FileOutputStream(new File(filename));
            JAI.create("encode", resizedImage, fos, getImageType(filename), null);
            ParameterBlock ParameterBlock pb = new ParameterBlock(); 
            ColorModel cm = new ComponentColorModel(ColorSpace.getInstance(ColorSpace.TYPE_YCbCr), new int[] {8}, false, false, Transparency.OPAQUE, DataBuffer.TYPE_BYTE);
            pb.add(cm); 
            RenderedOp imgycc = JAI.create("ColorConvert", pb);
    }
    catch (FileNotFoundException e)
    {
    }

使用JAI可以实现类似的功能:

    // now resize the image
    ParameterBlock pb = new ParameterBlock();
    pb.addSource(image); // The source image
    pb.add(wScale); // The xScale
    pb.add(hScale); // The yScale
    pb.add(0.0F); // The x translation
    pb.add(0.0F); // The y translation

    RenderingHints hints = new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);           
    RenderedOp resizedImage = JAI.create("SubsampleAverage", pb, hints);

    // lastly, write the newly-resized image to an
    // output stream, in a specific encoding
    try
    {
            FileOutputStream fos = new FileOutputStream(new File(filename));
            JAI.create("encode", resizedImage, fos, getImageType(filename), null);
            ParameterBlock ParameterBlock pb = new ParameterBlock(); 
            ColorModel cm = new ComponentColorModel(ColorSpace.getInstance(ColorSpace.TYPE_YCbCr), new int[] {8}, false, false, Transparency.OPAQUE, DataBuffer.TYPE_BYTE);
            pb.add(cm); 
            RenderedOp imgycc = JAI.create("ColorConvert", pb);
    }
    catch (FileNotFoundException e)
    {
    }