有一个方式是用 ImageIO.write(RenderedImage im, String formatName, File output) 
但这样就要牵扯到用一个文件来保存 有没有办法不用这种文件保存的方式来转换吗?求解

解决方案 »

  1.   

    用这个方法就可以了write(RenderedImage im, String formatName, OutputStream output) 最后一个参数传个 ByteArrayOutputStream 进去,然后使用这个对象的 toByteArray() 就成字组数组了。
      

  2.   

    这是小的图片才可以使用的方法。
    大型图片,不建议使用ImageIO来操作,
    该类设计之初,应该是为了处理图标的吧(Icon)。如果想把图片的最终内容保存在内存当中。
    沿用楼主的方式,果子的方法是最简单的了。实际上,我觉得JDK里面使用图像,多用RenderedImage类吧?
    这个类的对象实例,不就是保存着图像信息吗?而且也在内存中啊。
      

  3.   

    是啊,一般来说不会把图片字节存到库中去的,这样不管在效率和实现上都很麻烦。这个图片要能被再显示出来的话,那至少还得再存个图片的 MIME 格式吧,就是 image/gif 之类的。建议在应用服务器上建一个虚拟路径,把图片存到那个虚拟路径下,然后数据库中存个路径的相对地址就行了。拿 Tomcat 来说,在 server.xml 中加一句:<Context path="/resource" docBase="/home/name/resource" />然后把图片分门别类地在 /home/name/resource 路径下创建目录并存放进去,比如 /home/name/resource/icon/10233413412342.gif,数据表中存个 /icon/10233413412342.gif 就可以。在页面上这样就能显示了:http://localhost:8080/resource/icon/10233413412342.gif
      

  4.   

    ImageIO是个让人爱,又让人恨的东西,读取出来的图片如果使用BufferedImageOp去操作,经常会发现用他读取的图片处理时常出问题,抛出异常.