例子跟上一例差不多,不过,它都在内存中进行操作,不将图片保存至本地,也就是没有文件的保存操作。
这样可以大大提高程序的运行效率:
程序运行时间: 9651ms
下面是运行的关键代码,相当于对之前的代码进行重构,主要是性能方面,还有代码规范等。
代码如下所示:
// 获取开始时间
long startTime = System.currentTimeMillis();
// 在线图片地址1:
String sourceFilePath = "http://m1.img.libdd.com/farm4/2012/0919/14/BBCD755A1FB52703E9207D150178EB1DEC649C75FC09_500_313.jpg";
// 在线图片地址2:
String sourceFilePath2 = "http://m2.img.libdd.com/farm5/2012/0914/11/BB0C1C675286CF6D30A23F5C96EB07FDA5D0FE05049E_314_460.JPEG";
// 组装HTML代码片段
// String destImgPath = ParseImgUtils.constructHtmlCode(sourceFilePath);
List<ImageUrl> imageUrlList = ParseImgUtils.constructImageCode(sourceFilePath,
sourceFilePath2);
for (int i = 0; i < imageUrlList.size(); i++) {
// 文件名
String tempFilename = "E:\\ftpPath\\Snap48.jpg";
// 下载至本地
// try {
// URLConnectionDownloader.downloadToNative(imageUrlList.get(i).getSourceFilePath(),
// tempFilename);
// } catch (Exception e) {
// e.printStackTrace();
// }
// 按指定长度,宽度缩放图片大小
JPGTransformer jpgTransformer = new JPGTransformer();
String tempFilename2 = "E:\\ftpPath\\Snap48_new.jpg";
// 申明并初始化输出流
OutputStream fout = null;
try {
fout = URLConnectionDownloader.downloadToMemory(imageUrlList.get(i)
.getSourceFilePath());
} catch (Exception e2) {
e2.printStackTrace();
}
try {
// 注意:真正上传的是缩放后的文件
// jpgTransformer.transform2(tempFilename, tempFilename2, 300,
// 200);
jpgTransformer.transform3(imageUrlList.get(i).getSourceFilePath(), fout, 300, 200);
} catch (Exception e1) {
e1.printStackTrace();
}
// 在這里添加水印效果
MarkPicture.pressText("中科院軟件所", tempFilename2, "宋体", 1, 1, 25, 5, 5);
// 延时1秒以执行之后的操作
try {
Thread.currentThread();
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 上传至FTP地址
FtpUpload ftpUpload = new FtpUpload("*************", "***", "******************");
File file = new File(tempFilename2);
String destFileName = file.getName();
// String FileName = s.subString(lastIndexOf("\"),
// FullFileName.length);
// String fileString2 =
// filename.substring(filename.lastIndexOf("\\") + 1,
// filename.length() );
// 通過時間生成隨機不重復的文件名
destFileName = RandomFileName.createFileNameByDate() + ".jpg";
// destFileName = RandomFileName.uuidFileName();
// 输入流定义
InputStream in = null;
try {
in = new FileInputStream(file);
} catch (FileNotFoundException ex) {
ex.printStackTrace();
}
// 設置上傳的FTP目錄
String ftpPath = "download";
// 设定文件名和目录
if (ftpUpload.upMyFile(destFileName, in, ftpPath) == true) {
System.out.println("图片文件上传至FTP服务器已成功! ");
// 设定反馈信息
// 文件上傳成功了后,記得將上傳的文件同之前的原始數據聯系起來
String destFilePath = ftpUpload.getFtpFilePath(ftpPath, destFileName);
// soureFilePath同destFilePath聯系起來,具體使用算法,我這里只做簡單的關聯(用map鍵值對),后面可以用數據庫方式,文件存儲方式,內存方式
Map<String, String> relateMap = new TreeMap<String, String>();
relateMap.put(sourceFilePath, destFilePath);
// 设置ftp图片路径
imageUrlList.get(i).setDestFilePath(destFilePath);
// 设置一个别识码,全球唯一
imageUrlList.get(i).setFlag(destFileName);
// 将数据存入数据库
DBConn db = new DBConn();
db.saveToDb(imageUrlList.get(i));
} else {
System.out.println("图片文件上传至FTP服务器失敗,請重試或聯系管理員! ");
}
}
//获取结束时间
long endTime=System.currentTimeMillis();
System.out.println("程序运行时间: "+(endTime - startTime)+"ms");
运行效果截图如下所示: