Java 下载网络图片方法为非阻塞的我需要生成缩略图获取不到图片高宽

chaohua20 2013-04-07 12:52:20


setImage.setImageUrl(CrawlDownImage.getNewsImage(img));
setImage.setCreateTime(new Date());
setImage.setLastModifyTime(new Date());
//setImage.setImageHelp(imageHelp);
//获取文件扩展名
String fileExtName=Tools.getFileExtName(setImage.getImageUrl());
String sImageName=System.currentTimeMillis()+Tools.showRandom(10000)+
fileExtName;
//生成100缩略图
System.out.println(setImage.getImageUrl()+"-----------");
String fileSize=SmallImage.saveImageAsJpg(setImage.getImageUrl(),
Procedure.IMAGE_URL_S,
sImageName,
NewsSetImage.S_IMAGE_WIDTH,
NewsSetImage.S_IMAGE_HEIGHT);
String imageSize[]=fileSize.split("|");
System.out.println("imageSize[]"+imageSize);
System.out.println("imageSize:"+imageSize[0]);
System.out.println("imageSize:"+imageSize[1]);



下载图片代码

/***
* 获取网络新闻图片
* @param url 图片URL
* @return 返回替换过多URL
* @throws IOException
*/
public static synchronized String getNewsImage(String url)
throws IOException {
HttpClient client = new HttpClient();

// 忽略Cookies
client.getParams().setCookiePolicy(CookiePolicy.IGNORE_COOKIES);
GetMethod get = new GetMethod(url);
synchronized (get) {
client.executeMethod(get);
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
String filePath = Procedure.IMAGE_URL
+ df.format(Calendar.getInstance().getTime()) + "/";
String fileName = System.currentTimeMillis()
+ url.substring(url.lastIndexOf("."));
File storeFile = new File(filePath);
if (!storeFile.exists()) {
storeFile.mkdir();
}
FileOutputStream output = new FileOutputStream(filePath + fileName);
// 得到网络资源的字节数组,并写入文件
synchronized (output) {
output.write(get.getResponseBody());
output.close();
}
return filePath + fileName;
}
}


生成缩略图代码

/**
* <li>将生成的图片保存为JPG格式</li>
* @param fromFileStr - 源文件路径
* @param saveToFileStr - 保存文件路径
* @param width - 生成文件宽度
* @param hight - 生成文件高度
* @return String - 返回原图片的-宽|高
* @throws Exception - 错误信息
*/
public synchronized static String saveImageAsJpg(String fromFileStr, String filePath,
String fileName,int width, int hight) throws Exception {
BufferedImage srcImage;
String imgType = "JPEG";
if (fromFileStr.toLowerCase().endsWith(".png")) {
imgType = "PNG";
}
File saveFilepath = new File(filePath);
if(!saveFilepath.exists()){
saveFilepath.mkdir();
}
File saveFile = new File(filePath+fileName);
File fromFile = new File(fromFileStr);
srcImage = ImageIO.read(fromFile);
String size=srcImage.getWidth()+"|"+srcImage.getHeight();
if (width > 0 || hight > 0) {
srcImage = resize(srcImage, width, hight);
}
ImageIO.write(srcImage, imgType, saveFile);
return size;
}



这里在生成缩略图的时候下载图片还未完成导致获取不到图片高宽求解决办法
...全文
179 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
chaohua20 2013-04-07
  • 打赏
  • 举报
回复
引用 2 楼 nicholasbobo 的回复:
既然都用了synchronized关键字,那再取图片高度的时候就判断下getNewsImage方法执行完没有,或者干脆几个方法写到一个方法里,因为你这逻辑必然有先后顺序,用多线程处理肯定有冲突
检查执行完毕这个太麻烦 如果没有其他办法的话就只能写到一个方法里面了
nicholasbobo 2013-04-07
  • 打赏
  • 举报
回复
既然都用了synchronized关键字,那再取图片高度的时候就判断下getNewsImage方法执行完没有,或者干脆几个方法写到一个方法里,因为你这逻辑必然有先后顺序,用多线程处理肯定有冲突
chaohua20 2013-04-07
  • 打赏
  • 举报
回复
有没有人回下啊

67,511

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧