Tag: 图像

Java将图像转换为输入流而不创建文件

对于我正在处理的applet,我需要将BufferedImage文件转换为输入流,以便我可以将图像上传到我的MySQL服务器。 最初我使用的是这段代码: Class.forName(“com.mysql.jdbc.Driver”).newInstance(); Connection connection = DriverManager.getConnection(connectionURL, “user”, “pass”); psmnt = connection.prepareStatement( “insert into save_image(user, image) values(?,?)”); psmnt.setString(1, username); ImageIO.write(image, “png”, new File(“C://image.png”)); File imageFile = new File(“C://image.png”); FileInputStream fis = new FileInputStream(imageFile); psmnt.setBinaryStream(2, (InputStream)fis, (fis.length())); int s = psmnt.executeUpdate(); if(s > 0) { System.out.println(“done”); } (同时捕获相关的exception)代码挂起在applet尝试将图像保存到计算机的部分。 代码在Eclipse中完美运行,或者每当我从localhost运行applet时,我都认为问题在于applet将文件保存到用户计算机的权限。 我只是想知道是否有办法将图像文件转换为输入流而无需将文件保存到用户的计算机。 我试过用: ImageIO.createImageInputStream(image); 但后来我无法将ImageInputStream转换回InputStream 。 有什么建议? 谢谢!

如何在java中打印图像

我们如何在java中打印缓冲图像? 我们可以将FileInputStream发送到Print Service,但我需要向它发送缓冲的Image。 FileInputStream fin = new FileInputStream(“YOurImageFileName.PNG”); Doc doc = new SimpleDoc(fin, DocFlavor.INPUT_STREAM.GIF, null); job.print(doc, pras); 可能吗? 在这里查看完整的代码。

如何使用Java2D创建硬件加速映像?

我正在尝试创建一个快速图像生成器,它可以进行大量的2D变换和形状渲染,因此我尝试使用BufferedImage,然后获取Graphics2D对象来执行我的所有绘图。 我现在主要关注的是make非常快,所以我正在创建一个像这样的BufferedImage: GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); GraphicsConfiguration gc = ge.getDefaultScreenDevice().getDefaultConfiguration(); BufferedImage bImage = gc.createCompatibleImage(width, height, Transparency.TRANSLUCENT); Graphics2D graphics = bImage.createGraphics(); 但是,如果我这样做: System.out.println(bImage.getCapabilities(gc).isAccelerated()); 输出始终为false ,即使我使用-Dsun.java2d.opengl = True启动JVM也会打印该行: OpenGL pipeline enabled for default config on screen 0 我正在做一个BufferedImage,因为最后我想用ImageIO.write(bImage,“PNG”,file)将它保存到PNG文件中; 我可以创建一个VolatileImage,它会说它是加速的,但ImageIO在尝试保存时并不喜欢它,并说该图像无法转换为RenderedImage。 有关如何获得可存储到磁盘的加速图像的任何想法? 此外,我不想创建一个VolatileImage和复制到BufferedImage来保存,因为我的图像真的很大,我会遇到内存不足的问题……

在Java中识别具有相同内容的图像

不久之前,我花了一些时间寻找方法来确定两个图像是否相同才能回答这个问题 。 我现在面临一个稍微不同的问题:我手边有大约两千张图像,其中一些具有相同的内容,但是彼此的缩放/旋转版本(旋转总是90°的倍数),以及不同的压缩和图像格式(主要是jpg,一些png,没有别的)。 缩放不超过大约2:1。 我想做的是消除重复,同时保留最高质量的实例。 由于Java是我非常熟练的唯一语言,我需要使用Java。 对不同问题的回答提供了许多有用的链接,但看起来它们中的任何一个都不能在缩放/旋转时识别重复。 这个问题以及答案建议首先将所有图像缩放到非常小的尺寸(例如32 * 32或16 * 16),然后基本上进行一些散列,并基于散列进行比较。 这对我来说听起来很聪明,图像可以在比较之前预先排序,这将在排序之后成为O(n)问题。 但是,鉴于图像可能会旋转,我不知道如何处理它; 一种选择是手动浏览所有图像并决定旋转,因为它们所描绘的具有明确的方向(人眼可以非常容易地决定“向上”应该是哪种方式)。 如果可能的话,我想避免这样做。 是否有既定的方法/算法(链接提到SSIM)来处理这类问题,或者你们中的任何人都可以提出比上述更好的方法吗? 也许有人知道适合Java的Java库(在链接的问题中提到了OpenCV的Java包装器,然后是ImageJ,imgsclr)? 任何帮助表示赞赏。

一种简单的方法(工具?)来比较不同格式的像素像素?

好吧,我现在已经在java中编写了一个基本的无损jpeg joiner东西,但我想将它生成的文件与原始文件进行比较。 我只能在hex编辑器中进行比较,有没有人知道一个简单的方法,软件或基于java(最好是软件,因为我现在感觉不再需要编码!)我可以比较两个图像并产生一个“差异图” “像素不一样的地方? 谢谢。

了解超快速模糊算法

我试图理解超快速模糊算法背后的算法 。 下面是java的端口,它与android一起作为测试。 看起来这个版本做了一些我不太了解的优化,也没有任何评论。 void fastblur(Bitmap img, int radius){ if (radius<1){ return; } int w= img.getWidth(); int h=img.getHeight(); int wm=w-1; int hm=h-1; int wh=w*h; int div=radius+radius+1; int r[]=new int[wh]; int g[]=new int[wh]; int b[]=new int[wh]; int rsum,gsum,bsum,x,y,i,p,p1,p2,yp,yi,yw; int vmin[] = new int[Math.max(w,h)]; int vmax[] = new int[Math.max(w,h)]; int[] pix= new int[w*h]; img.getPixels(pix, 0, w, 0,0,w, […]

在Java中更改png的非透明部分的颜色

我试图自动更改一组图标的颜色。 每个图标都有一个白色填充图层,另一个图标是透明的。 这是一个例子:(在这种情况下它是绿色的,只是为了让它可见) 我试着做以下事情: private static BufferedImage colorImage(BufferedImage image) { int width = image.getWidth(); int height = image.getHeight(); for (int xx = 0; xx < width; xx++) { for (int yy = 0; yy < height; yy++) { Color originalColor = new Color(image.getRGB(xx, yy)); System.out.println(xx + "|" + yy + " color: " + originalColor.toString() […]

将图像与实际屏幕进行比较

我想让我的Java程序将实际屏幕与图片进行比较(截图)。 我不知道它是否可能,但我在Jitbit(一台宏录像机)中看过它,我想自己实现它。 (也许用那个例子你明白我的意思)。 谢谢 —-编辑—–换句话说,是否可以检查图像是否显示? 要查找并比较屏幕中的像素?

在java中绘制线条

此代码存在许多问题 public class LineEx extends JFrame implements MouseMotionListener,MouseListener{ int x1,y1,x2,y2; public LineEx(){ JLabel image=new JLabel(“”); JFileChooser chooser=new JFileChooser(); chooser.setCurrentDirectory(new File(“.”)); int r=chooser.showOpenDialog(new JFrame()); File file=chooser.getSelectedFile(); if(r==JFileChooser.APPROVE_OPTION){ try { BufferedImage bf; bf = ImageIO.read(file); ImageIcon icon=new ImageIcon(bf); image.setIcon(icon); image.setHorizontalAlignment(JLabel.CENTER); } catch (IOException ex) { Logger.getLogger(LineEx.class.getName()).log(Level.SEVERE, null, ex); } } JScrollPane jsp=new JScrollPane(image); getContentPane().add(jsp); image.addMouseListener(this); image.addMouseMotionListener(this); this.pack(); […]

在绘制图像时,jFrame GetGraphics在java中为null

我将图像绘制到jframe时出现nullexception错误。 我调试代码并检查图像和帧不是null但仍然在绘制图像到帧时抛出NULLexception。 请看一看 : public void run(){ try{ ObjectInputStream objVideoIn = new ObjectInputStream(serVideoIn); byte[] imgbytes=null; ByteArrayInputStream barrin=null; JFrame jf = new JFrame(); Graphics ga=jf.getGraphics(); //Getting null exception //Thread.sleep(10000); jf.setVisible(true); jf.setSize(400, 400); while(true){ int index=0; //Thread.sleep(300); int size= (int)objVideoIn.readObject(); imgbytes = new byte[size]; barrin = new ByteArrayInputStream(imgbytes); System.out.println(“image size” + size); //Thread.sleep(200); while(index<size) { System.out.println("reading image"); […]