【问题标题】:JAI Change JPEG ResolutionJAI 更改 JPEG 分辨率
【发布时间】:2015-04-28 22:40:57
【问题描述】:

我在使用 Java JAI(Java Advance Imaging)API 将 JPEG 图像的分辨率从 1024x800 更改为 512x400 时遇到了困难。

我使用过 API 并不断收到流或java.lang.OutOfMemory 异常。

任何有工作示例的人。

【问题讨论】:

    标签: java jai


    【解决方案1】:

    这是使用 JAI 的一个

    public void resize(String filename, RenderedOp image, double wScale, double hScale)
    {
        // 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);
        }
        catch (FileNotFoundException e)
        {
        }
    }
    

    【讨论】:

      【解决方案2】:

      这是一个工作示例,按“原样”提供,不提供任何保证:)

      BufferedImage scaleImage(BufferedImage sourceImage, int scaledWidth) {
         float scale = scaledWidth / (float) sourceImage.getWidth();
         int scaledHeight = (int) (sourceImage.getHeight() * scale);
         Image scaledImage = sourceImage.getScaledInstance(
            scaledWidth, 
            scaledHeight, 
            Image.SCALE_AREA_AVERAGING
         );
      
         BufferedImage bufferedImage = new BufferedImage(
            scaledImage.getWidth(null), 
            scaledImage.getHeight(null), 
            BufferedImage.TYPE_INT_RGB
         );
         Graphics g = bufferedImage.createGraphics();
         g.drawImage(scaledImage, 0, 0, null);
         g.dispose();
      
         return bufferedImage;
      }
      

      【讨论】:

      • 啊,混蛋,你是对的。我会删除答案,但它已被接受。我会赞成你的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-29
      • 1970-01-01
      • 2010-09-20
      • 2014-05-31
      • 2016-03-27
      • 2018-09-27
      • 2012-03-04
      相关资源
      最近更新 更多