`

Java动态处理图片

阅读更多

使用Java动态处理图片非常方便,可以用于很多应用场合,比如动态输入股市线,缩略图,动态banner图片、动态的界面风格等等。笔者也在软件开发过 程中使用了这些技术,使得软件的界面色彩风格可以用户自定义任何一种色彩,大大增强了软件界面的个性化适应能力。下面我对使用Java技术实现图片处理的 整个环节做主要说明:


1、图片的装载。我们要处理图片首先要装载图片到Java内存空间的图片对象,Java用很多类来支持图片的装载,比如
         a、根据图片文件字节数组装载图片:

public  Image  loadImage(byte[]  data){
   Image  t=Toolkit.getDefaultToolkit().createImage(data);
   trackImage(t,"装载字节数组图片");
   return  t;
 }
 


         b、根据URL来装载图片:

 

public  Image  loadImage(String  urlpath){
   Image  t=null;
   if(a  instanceof  Applet){
     try{
       URL  u=getResourceURL(urlpath);
       t=getApplet().getImage(u);
       trackImage(t,urlpath);//检测图片装载过程
     }catch(Exception  e){
       notifyListener(MediaLoadEvent.MEDIA_LOAD_FAILED,false,e.getMessage());//装载失败
     }
   }else{
     t=Toolkit.getDefaultToolkit().getImage(urlpath);
     trackImage(t,urlpath);//检测图片装载过程
   }
   return  t;
 }
 public  Image  loadImage(String  urlpath,boolean  isurl){
   Image  t=null;
   if(isurl){
     try{
       URL  u=getResourceURL(urlpath);
       t=Toolkit.getDefaultToolkit().getImage(u);
       trackImage(t,urlpath);
     }catch(Exception  e){
       notifyListener(MediaLoadEvent.MEDIA_LOAD_FAILED,false,e.getMessage());//装载失败
     }      
   }else{
     t=Toolkit.getDefaultToolkit().getImage(urlpath);
     trackImage(t,urlpath);//检测图片装载过程
   }
   return  t;
 }
 


 
2、图片装载完成后,我们可以对图片进行处理,改变色度、亮度、对比度,翻转、镜像等等处理操作。在这里我只详细讲一下最底层的象素变换调整技术,其他很多方法大都是根据这个来封装的。
 a、根据制定颜色值和一定范围色差讲图片做透明处理:

public  Image  transpanent(Image  repImage,Color  oldColor,int  errorRange){
   int  w=repImage.getWidth(a);
   int  h=repImage.getHeight(a);
   int[]  imgdata=parImage(repImage,w,h);
   int  rr,gg,bb;
   rr=oldColor.getRed();
   gg=oldColor.getGreen();
   bb=oldColor.getBlue();
   int  offr,offg,offb;
   for(int  i=0;i<h;i++){//逐行扫描
     for(int  j=0;j<w;j++){//逐列扫描
       int  which=i*w+j;
       int  r=((imgdata[which]&0xff0000>>>16));
       int  g=((imgdata[which]&0xff00>>>8));
       int  b=(imgdata[which]&0xff);
       offr=Math.abs(r-rr);
       offg=Math.abs(g-gg);
       offb=Math.abs(b-bb);
       if(offr+offg+offb<errorRange)imgdata[i*w+j]=16777215;
     }
   }
   Image  t=Toolkit.getDefaultToolkit().createImage(new  MemoryImageSource(w,h,imgdata,0,w));
   trackImage(t,"装载透明处理图片");
   return  t;
 }
 


 b、对图片做剪切处理,这里使用了图片处理过滤类CropImageFilter,类似的过滤器很多,分别实现不同要求的图片处理变换。

 

 

public  Image  crop(int  x,int  y,int  w,int  h  ,Image  img){
   ImageFilter  filter=new  CropImageFilter(x,y,w,h);
   ImageProducer  producer=new  FilteredImageSource(img.getSource(),filter);
   Image  t=a.createImage(producer);
   trackImage(t,"装载剪切图片");
   return  t;
 }
 


 
3、图片复合和绘制图片:
 使用Java的绘图类,可对多个图片进行叠加,并可以自定义绘制各种图形图象,比如实现图片水印、验证码图片,叠加banner图片等。

public  static  void  createImagePNG(String  signcode,OutputStream  out){
   BufferedImage  offimg=null;
   Graphics  offgra=null;
   while(offimg==null||offgra==null){
     if(offimg==null)offimg=new  BufferedImage(50,18,BufferedImage.TYPE_INT_RGB);
     if(offgra==null&&offimg!=null)offgra=offimg.getGraphics();
   }
   offgra.setColor(new  Color(235,235,235));
   offgra.fillRect(0,0,50,18);
   /*for(int  i=0;i<12;i++){//生成混淆背景,也可用混淆背景图片
     offgra.setColor(Color.decode("#"+color[SystemTool.getRandom(0,color.length-1)]));
     offgra.fillOval(SystemTool.getRandom(0,48),SystemTool.getRandom(0,18),1,1);//10,4);
   }*/
   offgra.setColor(Color.red);
   //offgra.setColor(Color.decode("#"+color[SystemTool.getRandom(0,color.length-1)]));
   try{
     Font  font  =  Font.createFont(Font.TRUETYPE_FONT,com.sunstudio.util.ClassLoaderEx.getResourceInputStream(SystemConfig.getParameter("validate_font")));//  FileInputStream("c:\comicbd.ttf"));
     offgra.setFont(font.deriveFont(Font.BOLD,18F));
   }catch(Exception  e){}
   offgra.drawString(signcode,1,14);
   PngEncoder  png=new  PngEncoder(Toolkit.getDefaultToolkit().createImage(offimg.getSource()),PngEncoder.ENCODE_ALPHA,PngEncoder.FILTER_LAST,3);
   try{out.write(png.pngEncode());}catch(Exception  e){}
   offgra.dispose();
 }
 




4。图片的编码输出:
     Java的图片对象是用于图片装载和处理的数据统一对象,当需要输出到输出设备时需要以指定图片文件格式来编码保存,常见的图片编码器有jpg、 bmp、gif89、gif87、png等等。笔者收集了很多图片格式编码器,如有需要可以和我联系,linlichao@163.com。
     对于输出哪种格式的图片只是编码器不同,过程完全相同,编码器就是按照不同的文件格式的要求对图片对象进行编码输出,这些都是国际标准,我们只需要调用就好了。

 

 PngEncoder  png=new  PngEncoder(Toolkit.getDefaultToolkit().createImage(offimg.getSource()),PngEncoder.ENCODE_ALPHA,PngEncoder.FILTER_LAST,3);
 try{out.write(png.pngEncode());}catch(Exception  e){}
 

 

分享到:
评论
5 楼 wt20008 2010-06-19  
wt20008 写道
谢谢,我也要一份,格式编码器和源码,非常感谢


36890091@qq.com
4 楼 wt20008 2010-06-19  
谢谢,我也要一份,格式编码器和源码,非常感谢
3 楼 pignut_wang 2009-12-28  
给一份图片格式编码器和源码,谢谢!
pignut_wang@126.com
2 楼 ytfei 2009-09-21  
能发一份完整的代码和图片格式编码器给我吗,谢谢
bbniao666@163.com
1 楼 zhanglongsr 2008-09-23  
您好,我对您的代码很感兴趣!能给我发一份吗?谢谢!
zhanglongsr@126.com

相关推荐

    Java图像处理类库 Java Image Filters

    Java图像处理类库,如Java Image Filters,是Java平台上的一个重要工具,用于对数字图像进行各种操作和修改。这些类库通常包含了一系列的类和方法,可以实现图像的过滤、调整、裁剪、旋转、合成等多种功能,为开发者...

    java 图像处理(模糊处理、锐化处理)

    在Java编程语言中,图像处理是一项重要的功能,可以用于创建、编辑或操作图像。本教程将探讨两个关键的图像处理技术:模糊处理和锐化处理。这些技术在图像分析、图像增强以及艺术创作中有着广泛的应用。 模糊处理是...

    JAVA基本数字图像处理

    在Java编程环境中,数字图像处理是一项重要的技术,广泛应用于图像分析、识别、增强等领域。"JAVA基本数字图像处理"这个项目旨在通过Java语言实现一系列基本的图像操作,以帮助开发者理解图像处理的基本原理并掌握其...

    java 图片处理工具类 java 图片处理工具类

    java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 ...

    Java图片处理类库SimpleImage.zip

    SimpleImage是阿里巴巴的一个Java图片处理的类库,可以实现图片缩略、水印等处理。 SimpleImage中的ImageRender是图片处理的基类,它是一个抽象类,我们看到,该类中定义了一个抽象方法render(),同时持有一个对...

    java动态生成图片 并把当前时间写在图片上

    Java动态生成图片并把当前时间写在图片上是一项常见的需求,比如用于生成验证码、日志记录或者自定义的报告。这个任务涉及到Java图形处理、日期时间处理以及IO操作等多个方面。下面将详细介绍如何实现这个功能。 ...

    基于java平台的图像处理软件的设计与实现

    基于 Java 平台的图像处理软件的设计与实现 本资源旨在设计和实现基于 Java 平台的图像处理软件,该软件能够实现基本的图像处理功能,如图像的放大、缩小、锐化等。该软件的设计基于 Java 语言,充分发挥了 Java ...

    Java图片处理工具ImageMagick

    Java图片处理工具ImageMagick是一个强大的跨平台图形处理库,它允许开发人员在Java应用程序中进行复杂的图像操作,包括但不限于转换、编辑、合成图像以及处理大量格式的图像文件。ImageMagick是由C语言编写的,但...

    Java图像处理.pdf

    Java 图像处理 Java 图像处理是使用 Java 语言对图像进行处理和操作的技术。该技术广泛应用于图像编辑、图像识别、计算机视觉等领域。 在 Java 中,对图像的处理可以通过使用 Java 2D API、Java Advanced Imaging...

    java图像处理 java图像处理java图像处理

    Java图像处理主要涉及Java Advanced Imaging (JAI) API和Java Image I/O (JIO) API。JAI API是Sun Microsystems开发的一个高级图像处理工具,它作为Java Media Framework的一部分,为Java 2D API提供了扩展,专门...

    java图像处理源代码

    Java图像处理源代码是开发者们在进行图形用户界面(GUI)开发时常用的一种工具,尤其在需要对图像进行各种操作,如裁剪、旋转、滤镜应用等场景下。这个资源提供了一个完整的Java图像处理功能集,旨在方便开发人员...

    java实现gif动画效果(java显示动态图片)

    3. **加载和处理图片** 使用`java.awt.image.ImageIO`类的`read`方法从文件中读取图片。在这个示例中,图片存储在指定的文件夹中,并根据`idx`变量的变化加载不同的图片帧。注意,由于图片编号是从1到16,所以在...

    java处理图片背景颜色的方法

    Java 处理图片背景颜色的方法 Java 处理图片背景颜色的方法是指利用 Java 语言来处理图片的背景颜色,例如将蓝底寸照批量转换为白底。这种方法可以批量处理大量图片,具有很高的实用价值。 title 中的“Java 处理...

    java 图像处理资源 api

    ### Java 图像处理资源 API #### 一、Java 2D API Java 2D API 是一套用于高级二维图形和图像处理的类集合,它涵盖了线条、文本和图像在一个全面的模型之中。此 API 提供了对图像合成以及带有 Alpha 通道的图像...

    java图片处理

    文件内含java 处理图片大小等比例缩放,指定颜色改变颜色。根据不同图片设置阴影图片。

    java图像处理

    Java图像处理是计算机科学中的一个重要领域,特别是在人工智能和视觉编程中有着广泛的应用。Java作为一种跨平台的编程语言,提供了丰富的库和API来支持图像处理任务,使得开发者能够创建功能强大的图像处理应用程序...

    java+png透明图片处理方法

    在Java编程语言中,处理PNG图像的透明度是一项常见的任务,尤其在创建用户界面或进行图形设计时。PNG格式支持alpha通道,这使得它能够表示不同程度的透明度,即所谓的“半透明”。以下是一些关于如何在Java中处理PNG...

    数字图像处理:JAVA语言实现

    《数字图像处理:JAVA语言实现》是一门涵盖了图像处理理论与实践的教程,它通过JAVA编程语言来讲解和实现各种图像处理技术。本教程旨在帮助学习者深入理解图像处理的基本概念,掌握用JAVA进行图像处理的方法,并能...

    java图形与图像处理

    Java图形与图像处理是Java程序设计的一个重要领域,主要涉及如何在Java环境中创建和操作图形以及处理图像。在Java中,我们通常使用`java.awt`和`java.awt.image`这两个包来实现图形与图像的处理。 标题中的"java...

Global site tag (gtag.js) - Google Analytics