[原创]Java 学习系列之图片处理_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
2
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2350 | 回复: 1   主题: [原创]Java 学习系列之图片处理        下一篇 
panpan.nie
注册用户
等级:大校
经验:4754
发帖:217
精华:2
注册:1970-1-1
状态:离线
发送短消息息给panpan.nie 加好友    发送短消息息给panpan.nie 发消息
发表于: IP:您无权察看 2015-4-22 16:47:10 | [全部帖] [楼主帖] 楼主

打开网页到处都是秀图片的,那么这些图片是如何处理的呢?

一、图片显示

1、html显示图片标签 <img>

       img 元素向网页中嵌入一幅图像。

       其常用属性有:

北京联动北方科技有限公司

请注意,从技术上讲,<img> 标签并不会在网页中插入图像,而是从网页上链接图像。<img> 标签创建的是被引用图像的占位空间。

例:<img height="100" src="http://bbs.landingbj.com/images/qrcode.png" id="qrcode">

2、使用图片作背景background-image

       标签作样式设计,使用css最方便。

北京联动北方科技有限公司

 例:<body style=background-image: url(/images/.gif)>

二、图片处理

1、将图片从位置A复制到位置B

①使用流将图片复制

InputStream fis = new FileInputStream("d:/pic/test.jpg");
byte[] b = new byte[1024];
//读取的数据长度
int len=0;
OutputStream fos = new FileOutputStream("d:/pic/test_bak.jpg");
while((len = fis.read(b))!=-1){
      fos.write(b,0,len);
}
fos.close();
fis.close();


②使用 ImageIO 将图片复制

使用ImageIO类的静态方法可以执行很多常见的图像I/O操作。

BufferedImage image = null;
image = ImageIO.read(new File("d:/pic/test.jpg"));
if (image != null)
{
      ImageIO.write(image, "jpg", new File("d:/pic/test_bak1.jpg"));
}


注:以上代码均只保留核心部分

2、将图片从网络下载到本地

将图片从网络下载到本地,就是数据源的获取方式不同,写文件同上

方法一:

String urlstr=”http://bbs.landingbj.com/images/qrcode.png”;
URL url = new URL(urlstr);
//打开连接
URLConnection con = url.openConnection();
//设置请求超时时间
con.setConnectionTime(5*1000);
InputStream is = con.getInputStream();


方法二:

URL url = new URL(urlstr);
image = ImageIO.read(url);


3、给目标图片添加水印

public static void pressImage(String pressImg, String targetImg,
int x, int y) {
      try {
            //目标文件
            File _file = new File(targetImg);
            Image src = ImageIO.read(_file);
            int wideth = src.getWidth(null);
            int height = src.getHeight(null);
            BufferedImage image = new BufferedImage(wideth, height,
            BufferedImage.TYPE_INT_RGB);
            Graphics g = image.createGraphics();
            g.drawImage(src, 0, 0, wideth, height, null);
            //水印文件
            File _filebiao = new File(pressImg);
            Image src_biao = ImageIO.read(_filebiao);
            int wideth_biao = src_biao.getWidth(null);
            int height_biao = src_biao.getHeight(null);
            g.drawImage(src_biao, (wideth - wideth_biao) / 2,
            (height - height_biao) / 2, wideth_biao, height_biao, null);
            //水印文件结束
            g.dispose();
            FileOutputStream out = new FileOutputStream(targetImg);
            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
            encoder.encode(image);
            out.close();
      } catch (Exception e) {
            e.printStackTrace();
      }
}


4、使用FileUpload控件实现文件上传

common-fileupload组件是apache的一个开源项目之一。用该组件可实现一次上传一个或多个文件,并可限制文件大小。将其commons-fileupload-1.2.2.jar 加入到项目的classpath

前台页面:

<form action="fileupload" method="post" enctype="multipart/form-data" name="form1">
<input type="file" name="file" />
<input type="submit" name="submit" value="上传" />
</form>


后台处理核心代码:

DiskFileUpload fu = new DiskFileUpload();
// 设置最大文件尺寸,这里是4MB   
fu.setSizeMax(4194304);
// 设置缓冲区大小,这里是4kb   
fu.setSizeThreshold(4096);
// 设置临时目录:   
fu.setRepositoryPath(tempPath);
// 得到所有的文件:   
List fileItems = fu.parseRequest(request);
Iterator i = fileItems.iterator();
// 依次处理每一个文件:   
while(i.hasNext()) {
      FileItem fi = (FileItem)i.next();
      // 获得文件名,这个文件名包括路径:   
      String fileName = fi.getName();
      // 在这里可以记录用户和文件信息   
      // ...
      // 写入文件,暂定文件名为a.txt,可以从fileName中提取文件名:   
      fi.write(new File(uploadPath + "a.txt"));
}




赞(0)    操作        顶端 
hei_nihao
注册用户
等级:少校
经验:1279
发帖:19
精华:0
注册:2015-4-17
状态:离线
发送短消息息给hei_nihao 加好友    发送短消息息给hei_nihao 发消息
发表于: IP:您无权察看 2015-4-24 9:03:23 | [全部帖] [楼主帖] 2  楼

给目标图片添加水不错,后台处理核心代码怎么没有了?



赞(0)    操作        顶端 
总帖数
2
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论