首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我希望将用户创建的图像的大小减少60%

我希望将用户创建的图像的大小减少60%
EN

Stack Overflow用户
提问于 2018-10-26 01:28:22
回答 1查看 33关注 0票数 0

我有以下代码:

代码语言:javascript
运行
复制
private synchronized void produceSignatureImage(java.awt.event.ActionEvent evt, final String envStrFileName) {
    final String es = envStrFileName;
    java.awt.EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            try {
                BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
                bufferedImage.createGraphics().drawImage(img, 0, 0, TrusteeSignature.this);
                String filename = sdf.format(new Timestamp(System.currentTimeMillis())) + ".jpg";
                File outputfile = new File(IMAGE_FILE_PATH + filename);
                String fullPath = outputfile.getAbsolutePath();
                if (isNotesLocal()) {
                    NotesThread.sinitThread();
                }
                s = openSession();
                s.setEnvironmentVar(envStrFileName, fullPath);
                ImageIO.write(bufferedImage, "jpg", outputfile);
                Button b = (Button) evt.getSource();
                b.setEnabled(false);
                clear();
            } catch (Exception ex) {
                ex.printStackTrace();
            } finally {
                try {
                    if (s != null) {
                        TrusteeSignature.this.closeSession(s);
                    }
                } catch (NotesException e) {
                    e.printStackTrace();
                }
                if (isNotesLocal()) {
                    NotesThread.stermThread();
                }
            }
        }
    });

这工作得很好,但我想将图像的大小从500x250减少到200x150,减少60%。

我不需要我们写入文件系统的原始大小的图像,在写入之前,我会很乐意减少文件的大小。我在这个站点的其他地方找到了以下代码。

代码语言:javascript
运行
复制
   /**
 * we want the x and o to be resized when the JFrame is resized
 *
 * @param originalImage an x or an o. Use cross or oh fields.
 *
 * @param biggerWidth
 * @param biggerHeight
 */
private Image resizeToBig(Image originalImage, int biggerWidth, int biggerHeight) {
    int type = BufferedImage.TYPE_INT_ARGB;

    BufferedImage resizedImage = new BufferedImage(biggerWidth, biggerHeight, type);
    Graphics2D g = resizedImage.createGraphics();

    g.setComposite(AlphaComposite.Src);
    g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
    g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
    g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

    g.drawImage(originalImage, 0, 0, biggerWidth, biggerHeight, this);
    g.dispose();

    return resizedImage;
}

我看到图像被放大了。我假设,一旦我将60%的调整大小数字设置为变量,也可以通过以下两行代码来减小图像的大小:

代码语言:javascript
运行
复制
BufferedImage resizedImage = new BufferedImage(biggerWidth, biggerHeight, type);
Graphics2D g = resizedImage.createGraphics();

我不确定的是:因为我只想将40%大小的图像写入操作系统,所以在将JPG文件写入操作系统之前,我应该在代码中的什么位置调整大小?

是的,我是一个Java新手!

EN

回答 1

Stack Overflow用户

发布于 2018-10-26 01:54:21

在你的try代码块的开头试试这个:

代码语言:javascript
运行
复制
Image resizedImage = img.getScaledInstance(newWidth, newHeight, Image.SCALE_DEFAULT);
BufferedImage bufferedImage = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB);
bufferedImage.createGraphics().drawImage(resizedImage, 0, 0, TrusteeSignature.this);

...where newWidthnewHeight等于您想要调整大小的尺寸,例如200150

文档:https://docs.oracle.com/javase/8/docs/api/java/awt/Image.html#getScaledInstance-int-int-int-

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52994961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档