java对图片的裁剪(包括来自网络的图片)
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Calendar;
import java.util.Date;
import java.util.Iterator;
import java.util.Random; import javax.imageio.ImageIO;
import javax.imageio.ImageReadParam;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream; /**
* 剪裁图片(从网络上获取图片) * @description
* @time 2013-2-24下午02:07:00 * @version
*/
public class CutImageUtil { private static final String DESTIMAGEPATH = "e://";
private static final String BASE_IMAGE_URL="http://pimages3.tianjimedia.com/resources/product/";
/**剪切点X坐标*/
private static int x=16;
/**剪切点Y坐标*/
private static int y=22;
/**剪切点宽度*/
private static int width=784;
/**剪切点高度*/
private static int height=560; /**
*
* @Description: 剪切网络图片
* String
*/
public static String cutFromUrl(String imageUrl) {
String suffix=imageUrl.substring(imageUrl.lastIndexOf("."));
String fileName="";
String fileNameAndPath="";
InputStream is = null;
ImageInputStream iis = null;
String result=null;
try {
/**读取图片*/
Iterator<ImageReader> it = ImageIO.getImageReadersByFormatName("jpg");
ImageReader reader = it.next();
/**获取图片流*/
URL url = new URL(imageUrl);
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
/**设置请求方式为"GET"*/
httpConn.setRequestMethod("GET");
/**超时响应时间为5秒*/
httpConn.setConnectTimeout(5 * 1000);
httpConn.connect();
is = httpConn.getInputStream(); iis = ImageIO.createImageInputStream(is);
reader.setInput(iis, true); ImageReadParam param = reader.getDefaultReadParam();
Rectangle rect = new Rectangle(x, y, width, height);
param.setSourceRegion(rect);
BufferedImage bi = reader.read(0, param); fileName=GlobalMethodUtil.createFileName(suffix);
fileNameAndPath=GlobalMethodUtil.createDir("/home/tmp/resources/product/")+fileName;
if(fileNameAndPath==null||fileNameAndPath.equals("")){
result="";
}else{
result=BASE_IMAGE_URL+fileNameAndPath.substring(fileNameAndPath.indexOf("product/")+8);
}
ImageIO.write(bi, "jpg", new File(fileNameAndPath));
} catch (Exception ex) {
ex.printStackTrace();
} finally {
try {
if (is != null) {
is.close();
}
if (iis != null) {
iis.close();
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
return result;
} /**
*
* @Description: 剪切本地图片
* @param imagePath
* String
*/
public static String cutLocalImage(String imagePath) {
String fileName="";
String fileNameAndPath="";
FileInputStream fis = null;
ImageInputStream iis = null;
try {
/**读取图片*/
Iterator<ImageReader> it = ImageIO.getImageReadersByFormatName("jpg");
ImageReader reader = it.next();
/**获取图片流*/
fis = new FileInputStream(imagePath);
iis = ImageIO.createImageInputStream(fis);
reader.setInput(iis, true); ImageReadParam param = reader.getDefaultReadParam();
Rectangle rect = new Rectangle(x, y, width, height);
param.setSourceRegion(rect);
BufferedImage bi = reader.read(0, param); fileName=GlobalMethodUtil.createFileName("jpg");
fileNameAndPath=GlobalMethodUtil.createDir("/home/tmp/qicheInfo/resources/product/")+fileName;
ImageIO.write(bi, "jpg", new File(DESTIMAGEPATH + new Date().getTime() + "." + "jpg"));
} catch (Exception ex) {
ex.printStackTrace();
} finally {
try {
if (fis != null) {
fis.close();
}
if (iis != null) {
iis.close();
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
return BASE_IMAGE_URL+fileNameAndPath.substring(fileNameAndPath.indexOf("product/")+8);
} private static class GlobalMethodUtil { /**
* 返回文件名(file)
* @Description:
* @return
*/
public static String createFileName(String suffix) {
/**结合目录和文件名 生成唯一标识符*/
Calendar c = Calendar.getInstance();
/**利用小时分钟毫秒和源文件的文件名生成新文件名+文件后缀*/
String name = c.get(Calendar.HOUR) + "" + c.get(Calendar.MINUTE) + "" + c.get(Calendar.SECOND)
+ c.get(Calendar.MILLISECOND) + randStr()
+ suffix;
return name;
} /**
* 利用26个字母生成随机字母组合
* @Description:
* @return
*/
public static String randStr() {
String[] rands = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "k", "o", "p", "q",
"r", "s", "t", "u", "v", "w", "x", "y", "z"};
String randstr = "";
/**生成8个随机字母组合*/
for (int i = 0; i < 8; i++) {
randstr += rands[new Random().nextInt(26)];
}
return randstr;
} /**
* 创建文件目录
* @Description:
* @return 文件目录路径
*/
public static String createDir(String path) {
Calendar c = Calendar.getInstance();
String dir = path;
dir += c.get(Calendar.YEAR) + "" + ((c.get(Calendar.MONTH) + 1)<10?"0"+(c.get(Calendar.MONTH) + 1):(c.get(Calendar.MONTH) + 1)) + "" + (c.get(Calendar.DATE)<10?"0"+c.get(Calendar.DATE):c.get(Calendar.DATE)) + "/";
File tempDir = new File(dir);
/**判断文件路径是否存在*/
if (!tempDir.exists()) {
/**不存在就创建文件目录*/
tempDir.mkdirs();
}
return dir;
} /**
*
* @Description: 获取分页的总页数
* @param count 数据总量
* @param size 每页分页数量
* @return
* int
*/
public static int getPageSize(int count,int size){
return count%size!=0?(count/size+1):(count/size);
} }
}
java对图片的裁剪(包括来自网络的图片)的更多相关文章
- 8.进行图片的裁剪,同时使用resize将图片的维度进行变化
1.img.crop((x1, y1, x2, y2)) 进行图片的裁剪 参数说明: x1, y1, x2, y2 表示图片的大小 2. img.resize((w, h)) # 进行图片的维度变化 ...
- Java实现图片的裁剪(包括透明背景)
需求: 有一张位置大小的图片,现在需要根据这张原图得到指定尺寸的图片,且得到的图片要符合原先图片的比例,就是在原图的基础上等比例缩放得到图片后,在进行剪裁,这样保证得到的图片是原图的一部分,而不是将原 ...
- 使用UIImageView展现来自网络的图片
本文转载至 http://www.cnblogs.com/chivas/archive/2012/05/21/2512324.html UIImageView:可以通过UIImage加载图片赋给UII ...
- 【Java/Android性能优 7】Android公共库——图片缓存 网络缓存 下拉及底部更多ListView 公共类
本文转自:http://www.trinea.cn/android/android-common-lib/ 介绍总结的一些android公共库,包含缓存(图片缓存.预取缓存.网络缓存).公共View( ...
- Android(java)学习笔记204:自定义SmartImageView(继承自ImageView,扩展功能为自动获取网络路径图片)
1.有时候Android系统配置的UI控件,不能满足我们的需求,Android开发做到了一定程度,多少都会用到自定义控件,一方面是更加灵活,另一方面在大数据量的情况下自定义控件的效率比写布局文件更高. ...
- Android(java)学习笔记147:自定义SmartImageView(继承自ImageView,扩展功能为自动获取网络路径图片)
1. 有时候Android系统配置的UI控件,不能满足我们的需求,Android开发做到了一定程度,多少都会用到自定义控件,一方面是更加灵活,另一方面在大数据量的情况下自定义控件的效率比写布局文件更高 ...
- Java图片缩略图裁剪水印缩放旋转压缩转格式-Thumbnailator图像处理
前言 java开发中经常遇到对图片的处理,JDK中也提供了对应的工具类,不过处理起来很麻烦,Thumbnailator是一个优秀的图片处理的开源Java类库,处理效果远比Java API的好,从API ...
- Java从网络读取图片并保存至本地
package cn.test.net; import java.io.File; import java.io.FileOutputStream; import java.io.InputStrea ...
- Android LazyList 从网络获取图片并缓存
原演示地址 本文内容 环境 演示 LazyList 从网络获取图片并缓存 参考资料 本文是 Github 上的一个演示,通过网络获取歌手专辑的缩略图,并显示在 ListView 控件中.该演示具备将缩 ...
随机推荐
- ARP局域网欺骗工具编写
每台主机都设有一个ARP高速缓存(ARP cache),里面有本局域网上各主机和路由器的IP地址和硬件地址的映射表,这些都是该主机目前知道的一些地址. 当主机A要向本局域网上的某个主机B发送IP数据报 ...
- 输入A和B,计算并输出A+B
EOF是一个预定义的常量,等于-1. 输入A和B,计算并输出A+B Sample input: 1 5 10 20 Sample output: 6 30 #include <iostr ...
- HW2.1
import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...
- CF402E Strictly Positive Matrix 传递闭包用强连通分量判断
题目链接:http://codeforces.com/problemset/problem/402/E /**算法分析: 这道题考察了图论基本知识,就是传递闭包,可以构图用强联通分量来判断 */ #i ...
- HTTP的升级产品:SPDY
一.什么是SPDY? SPDY是Google开发的基于传输控制协议(TCP)的应用层协议 .目前已经被用于Google Chrome浏览器中来访问Google的SSL加密服务.SPDY当前并不是一个标 ...
- redis的hash, list, set类型相关命令
hash相关命令: 1. hset HSET key field value 将哈希表key中的域field的值设为value.如果key不存在,一个新的哈希表被创建并进行hset操作.如果域fiel ...
- 礼仪或许就是尊重的还有一个说法——leo鉴书61
<Leo鉴书(第1辑)>已登陆百度阅读,今后还将不断更新,免费下载地址:http://t.cn/RvawZEx 礼仪从字面上就区分成"礼"和"仪"两 ...
- [Angular 2] Building a Toggle Button Component
This lesson shows you how to build a Toggle Button in Angular 2 from scratch. It covers using transc ...
- Linux 设置系统时间和日期 API
嵌入式Linux 设置时间和日期 API ,它是busybox要提取的源代码. Linux设置时间和日期的步骤: 1. 设置系统时间和日期: 2. 该系统的时间和日期,同步到硬件. #include ...
- 标准I/O库之标准I/O的效率
程序清单5-1 用getc和putc将标准输入复制到标准输出 #include "apue.h" int main( void ) { int c; while(( c = get ...