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

发布于 2024-08-03 02:49:34 字数 250 浏览 6 评论 0原文

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

下面的 ImageMagick 命令可以解决这个问题:

convert input.png -scale 40x40 -colors 10 output.png

如何在 Java 中获得相应的结果?

向 ImageMagick 付费不是一个选择:-)

Given a rectangular input image I'd like to create an output image of size 40x40 pixels using a maximum of 10 colors. Hence, the two operatons needed are re-scaling and color reduction.

The following ImageMagick command does the trick:

convert input.png -scale 40x40 -colors 10 output.png

How would you achieve the corresponding result in Java?

Shelling out to ImageMagick is not an option :-)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

最笨的告白 2024-08-10 02:49:34

使用 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)
    {
    }

Something like this would work using 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)
    {
    }
千鲤 2024-08-10 02:49:34

在 jai.dev.java.net 上查找 Java 高级成像 (JAI)

Look up Java Advanced Imaging (JAI) at jai.dev.java.net

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文