概述
最近,老师让把数据库中的一个字段中的img地址取出来,并将图片按照一定的比例缩放!字段的内容如下:
<p> 测试图片缩放<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);
}
}
最后
以上就是愉快书包为你收集整理的使用java图片缩放的全部内容,希望文章能够帮你解决使用java图片缩放所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复