使用java图片缩放

    最近,老师让把数据库中的一个字段中的img地址取出来,并将图片按照一定的比例缩放!字段的内容如下:

<p>&nbsp;测试图片缩放<img height="643" width="640" alt="" src="/MyBlogManager/userfiles/image/2e7462823251c127de2e32287b616d5f.jpg" />这里也是</p>

当时看到这么多的信息,怎么去做呢?想了好久,一点点的测试:功夫不负有心人,终于算是有点成果了!现在我把成果的内容写了下来,希望朋友们能多提点意见!请求加精!

代码内容:

package resize_image;

import java.util.HashMap;
import java.util.Iterator;

public class Resize_Image {

 private final int maxWidth = 200; // 设置缩放的宽度
 private final int maxHeight = 150;// 设置缩放的高度
 private String  final_content = "";//最终得到想要的内容信息
 
 String content = "";              // 用来接收news_Content字段的变量

 String qian = "";        // 用来接收news_Content字段前部分的字段

 String zhong = "";       // 用来接收news_Content字段中间部分的字段

 String hou = "";      // 用来接收news_Content字段后部分的字段

 String param[];       // 用来存放 用空格分隔后的中间部分内容   param = zhong.split(" ");
 
 // 构造的时初始化变量
 public Resize_Image(String content) {
  this.content = content;

 }

 public String text_replace() {
  // 判断内容是否存在img标签,如果存在就进行处理
  if (content.contains("<img")) {

   // 截取前部分的字符串
   qian = content.substring(0, content.indexOf("<img"));
   
   // 截取中间部分的字符串,也就是截取前部分后面的<img src="" />标签
   zhong = content.substring(qian.length(), content.indexOf("/>") + 2);

   // 截取后部分的内容
   hou = content.substring(qian.length()+zhong.length(), content.length());
   
   // 测试输出
   System.out.println("截取后前部分的内容"+qian);
   System.out.println("截取后中部分的内容"+zhong);
   System.out.println("截取后后部分的内容"+hou);
   
   /**
    *  得到中间的<img />后,进行处理得到其属性值,
    * 找到一个规律,每个属性中间都以一个空格分隔,我们可以通过空格分隔得到属性的所有信息
    */
   param = zhong.split(" ");
   System.out.println("param的长度:"+param.length);
   
   /**
    * 得到所有的属性值,为了更好的处理,这里采用HashMap来存放
    * HashMap是以键值对存储,存放格式hm.put("width", 200);
    */
   HashMap hm = new HashMap();
   // 根据img中间的属性值的多少来进行循环,目的是将得到的属性的名称和值,存放到HashMap
   for(int i = 0 ;i < param.length; i++)
   {
    // 为什么要i==0时,跳转呢,因为用空格分隔后的第一个元素事 img ,img 在后面得到内容时当做固定的字符串用加号拼起来的
    if(i == 0){
     continue;
    }
    // 如果i==字符串分割后的最后一个字符串的长度,则就停止循环,因为最后一个是/>
    if(i == param.length - 1)
    {
     break;
    }
    // 取得属性之后,找打了一个规律,属性的值都是以等号相连的,我就用等号来分隔它的名称和值,来放入HashMap
    String[] key_value = param[i].split("=");
    hm.put(key_value[0], key_value[1]);// 存放img所有属性
   }
    
   // 获取图片的路径,目的是放到图片的a标记上,当用户点击的时候,链接到图片的原来路径得到原来的图片
   String src = hm.get("src").toString();
   
   
   zhong = "<a href="+hm.get("src")+">"+zhong+"</a>";
   
   // 为什么要截取呢,因为从数据库中得到的属性都值都是以"4000"方式存储的,所以我们要去掉双引号,才能转换成整型
   int newHeight = Integer.valueOf(hm.get("height").toString().substring(1,hm.get("height").toString().length()-1 )).intValue();
   int newWidth = Integer.valueOf(hm.get("width").toString().substring(1,hm.get("width").toString().length()-1 )).intValue();
   
   if(newWidth > this.maxWidth)
   {
    newHeight = this.maxWidth * newHeight / newWidth;
    newWidth = this.maxWidth;
    hm.remove("height");
    hm.put("height", newHeight);
    hm.remove("width");
    hm.put("width", newWidth);
    System.out.println("替换后的宽度:"+newWidth);
    System.out.println("替换后的高度"+newHeight);
   }
   else if(newHeight >maxHeight )
   {
    newHeight = this.maxHeight;
    newWidth = this.maxHeight * newWidth / newHeight;
    hm.remove("height");
    hm.put("height", newHeight);
    hm.remove("width");
    hm.put("width", newWidth);
    System.out.println("替换后的宽度:"+newWidth);
    System.out.println("替换后的高度"+newHeight);
   }
 
   //设置新的zhong
   
   String newsImage = "";
   // 根据HashMap的键来进行迭代
   Iterator iterator = hm.keySet().iterator();
   while(iterator.hasNext())
   {
    String key = iterator.next().toString();
    // 根据索引来得到对应的值
    String value = hm.get(key).toString();
    // 累加得到最新的属性,这里的属性的高度和宽度进行了缩放,所以在页面现实的时候会变小
    newsImage += key +"="+value+" ";
   }
   zhong = "<a href="+hm.get("src")+">"+"<img "+newsImage+"/>"+"</a>";
   
   this.final_content += this.qian + this.zhong;
   /**
    * 关键点,为什么将后面的内容又赋值了原来的内容呢,目的是下面的回调方法,当在方法中再次调用自己的时候,会从新的去处理后面的内容
    * 因为后面的内容也包括前,中,后,三个部分,进行同样的处理
    */
   this.content = hou;
   
   text_replace();// 回掉方法重复操作
   
  }else
  {
   // else中的操作是防方法回掉的时候不会因为没有<img/>标签,导致最后一次的内容没法得到
   this.final_content += content ;
  }
  
  return final_content;
 }

 public static void main(String[] args) {
  // TODO 自动生成方法存根
  Resize_Image t = new Resize_Image(
    "yyyy<img width=/"1000/" height=/"4000/" alt=/"/" src=/"asdasd/" />yyyy<img width=/"220/" height=/"430/" src=/"ffffasdasd/" />yyyyyyyy");
  t.text_replace();
  System.out.println("最新的内容"+t.final_content);
 }


}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值