import java.awt.image.BufferedImage;
import java.io.File;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.HashMap;
import java.util.Map;
import javax.imageio.ImageIO;
import org.apache.log4j.Logger;
public class ConnTest {
private static Logger logger = Logger.getLogger(ConnTest.class);
public static void main(String[] args) {
Map<String, Object> map = null;
ConnTest connTest = new ConnTest();
String picUrl = "http://img.alicdn.com/bao/uploaded/i4/1039969019/TB2Oso2cDMlyKJjSZFFXXalVFXa_!!1039969019.jpg_430x430q90.jpg";
try {
map = connTest.getUrlPicLR_try2(picUrl);
} catch (Exception e) { //第一次“获取网络连接图片的长宽及图片名”失败后,尝试第二次
e.printStackTrace();
logger.info("第一次“获取网络连接图片的长宽及图片名”失败,下面开始尝试第二次:");
try {
Thread.sleep(2*1000);
logger.info("================》当前线程睡2秒");
map = connTest.getUrlPicLR_try2(picUrl);
} catch (Exception e1) {
logger.info("很遗憾!第二次“获取网络连接图片的长宽及图片名”也失败,将不再尝试");
}
}
System.out.println(map.get("picName")); //如果两次“获取网络连接图片的长宽及图片名”均失败,则返回null
System.out.println(map.get("width"));
System.out.println(map.get("height"));
}
public Map<String, Object> getUrlPicLR_try2(String picUrl) throws Exception{
Map<String, Object> map = new HashMap<>();
URL url = null;
InputStream is = null;
BufferedImage img = null;
File picture = new File(picUrl);
String picName = picture.getName();
map.put("picName", picName);
try {
url = new URL(picUrl);
// 打开连接
URLConnection con = url.openConnection();
System.err.println("打开连接成功");
con.setConnectTimeout(10000);//链接时间
con.setReadTimeout(10000);
// 输入流
is = con.getInputStream();
//is = url.openStream();
img = ImageIO.read(is);
if(img!=null){
int width = img.getWidth();
map.put("width", width);
int height = img.getHeight();
map.put("height", height);
}else{
System.out.println("图片不存在!");
}
} catch (Exception e) {
e.printStackTrace();
map = null;
} finally {
try {
is.close();
if(map == null) {
throw new Exception("关流成功,流读取失败");
}
} catch (Exception e) {
throw new Exception("关流失败");
}
}
return map;
}
}
上述是将图片从网页上读取图片,下面是切割图片
public String picCut(String url){
SimpleDateFormat YYYY = new SimpleDateFormat("yyyy");
SimpleDateFormat MM = new SimpleDateFormat("MM");
SimpleDateFormat dd = new SimpleDateFormat("dd");
Long nowTime = System.currentTimeMillis();
String year = YYYY.format(nowTime);
String month = MM.format(nowTime);
String day = dd.format(nowTime);
String now = year+"\\"+month+"\\"+day;
File picture = new File(url);
BufferedImage sourceImg;
String arrurl = "";
try {
sourceImg = ImageIO.read(new FileInputStream(picture));
int width = sourceImg.getWidth();
int height = sourceImg.getHeight();
FileInputStream is = null;
ImageInputStream iis = null;
try {
// 读取图片文件
is = new FileInputStream(url);
Iterator<ImageReader> it = ImageIO
.getImageReadersByFormatName(url.substring(url.length()-3));
ImageReader reader = it.next();
// 获取图片流
iis = ImageIO.createImageInputStream(is);
reader.setInput(iis, true);
ImageReadParam param = reader.getDefaultReadParam();
Rectangle rect = new Rectangle(0, 0, width, (int) ((int)height*0.8));
param.setSourceRegion(rect);
BufferedImage bi = reader.read(0, param);
// 保存新图片
if(!(new File("D:\\en_US1\\pic\\"+now)).exists()){
(new File("D:\\en_US1\\pic\\"+now)).mkdirs();
System.out.println("创建目录为:"+(new File("D:\\en_US1\\pic\\"+now)));
Thread.sleep(500);
}
ImageIO.write(bi, url.substring(url.length()-3), new File(url.replace("C:", "D:")));
} finally {
if (is != null)
is.close();
if (iis != null)
iis.flush();
iis.close();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.print("====================图片读取失败");
}
System.out.println("===========================图片剪切完成");
return url.replace("C:", "D:");
}
从网页上下载图片
//根据图片URL将图片下载到本地
public String downPic(String picUrl){
SimpleDateFormat YYYY = new SimpleDateFormat("yyyy");
SimpleDateFormat MM = new SimpleDateFormat("MM");
SimpleDateFormat dd = new SimpleDateFormat("dd");
Long nowTime = System.currentTimeMillis();
String year = YYYY.format(nowTime);
String month = MM.format(nowTime);
String day = dd.format(nowTime);
String now = year+"\\"+month+"\\"+day;
String bUrl = null;
try {
URL url = new URL(picUrl);
// 打开连接
URLConnection con = url.openConnection();
con.setConnectTimeout(10000);//链接时间
con.setReadTimeout(10000);
// 输入流
InputStream is = con.getInputStream();
DataInputStream dataInputStream = new DataInputStream(is);
String imageName = this.getUrlPicLR(picUrl).get("picName").toString();
if(!(new File("C:\\en_US1\\pic\\"+now)).exists()){
(new File("C:\\en_US1\\pic\\"+now)).mkdirs();
System.out.println("创建目录为:"+(new File("C:\\en_US1\\pic\\"+now)));
Thread.sleep(500);
}
FileOutputStream fileOutputStream = new FileOutputStream(new File("C:\\en_US1\\pic\\"+now+"\\"+imageName));
byte[] buffer = new byte[1024];
int length;
while ((length = dataInputStream.read(buffer)) > 0) {
fileOutputStream.write(buffer, 0, length);
}
dataInputStream.close();
fileOutputStream.flush();
fileOutputStream.close();
bUrl = ("C:\\en_US1\\pic\\"+now+"\\"+imageName);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
logger.error("===================图片下载失败");
}
System.out.print(picUrl+"===============下载成功");
return bUrl;
}