From 9a27171938a06e38d16937e8fcea3d45099e3d81 Mon Sep 17 00:00:00 2001 From: luffy9412 <1029559041@qq.com> Date: Wed, 27 Sep 2017 00:57:18 +0800 Subject: [PATCH] =?UTF-8?q?jpg=E5=90=88=E6=88=90gif?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/src/main/java/org/pqh/gif/PixivUtil.java | 60 ++++++++++--------- 1 file changed, 32 insertions(+), 28 deletions(-) diff --git a/core/src/main/java/org/pqh/gif/PixivUtil.java b/core/src/main/java/org/pqh/gif/PixivUtil.java index c41deaa..5847015 100644 --- a/core/src/main/java/org/pqh/gif/PixivUtil.java +++ b/core/src/main/java/org/pqh/gif/PixivUtil.java @@ -15,6 +15,7 @@ import javax.net.ssl.HttpsURLConnection; import java.awt.*; import java.awt.image.BufferedImage; import java.io.*; +import java.util.Arrays; import java.util.Enumeration; import java.util.List; import java.util.zip.ZipEntry; @@ -33,19 +34,18 @@ public class PixivUtil implements LogManger{ private static final String imgPath="tmp/images/"; - private static final String gifPath=imgPath+"gif/"; /** * 合成动图 * @param illust_id */ public static void downLoadImg(int illust_id,String phpsessid){ - InputStream is = null; - FileOutputStream fos = null; - BufferedOutputStream bos = null; + InputStream is; + FileOutputStream fos; + BufferedOutputStream bos; ZipFile zipFile = null; String imageUrl=baseUrl+illust_id; - String path; + File tmpDir = null; try { log.info("图片链接:"+imageUrl); Connection.Response response=Jsoup.connect(imageUrl).cookie("PHPSESSID",phpsessid).execute(); @@ -75,13 +75,17 @@ public class PixivUtil implements LogManger{ log.info("开始解压"); long a = System.currentTimeMillis(); - path = file.getAbsolutePath().replace(".zip", ""); + tmpDir = new File(file.getAbsolutePath().replace(".zip", "")); + File jpgDir=new File(tmpDir.getAbsolutePath() + "/jpg"); + File pngDir=new File(tmpDir.getAbsolutePath()+"/png"); + jpgDir.mkdirs(); + pngDir.mkdirs(); while (entrys.hasMoreElements()) { ZipEntry zipEntry = (ZipEntry) entrys.nextElement(); is = zipFile.getInputStream(zipEntry); - String imgPath = path + "\\" + zipEntry.getName(); - File imgFile = new File(imgPath); - FileUtils.forceMkdirParent(imgFile); + String jpgPath = jpgDir.getAbsolutePath()+"/"+ zipEntry.getName(); + File imgFile = new File(jpgPath); + log.info("开始解压图片到:" + imgFile.getAbsolutePath()); byte buf[] = new byte[buffer]; fos = new FileOutputStream(imgFile); @@ -92,14 +96,16 @@ public class PixivUtil implements LogManger{ } bos.close(); is.close(); - ImageIO.write(ImageIO.read(imgFile),"png",new File(imgPath.replace("jpg","png"))); + File pngFile=new File(jpgPath.replaceAll("jpg","png")); + ImageIO.write(ImageIO.read(imgFile),"png",pngFile); } - int length = new File(path).listFiles().length; + + int length = jpgDir.listFiles().length; log.info(length + "张图片解压完毕,耗时:" + (System.currentTimeMillis() - a) + "ms"); if (length > 0) { - jpgToGif(document.title().split("/")[0].replaceAll("[「,」]", ""), path, node.get("frames")); + jpgToGif(document.title().split("/")[0].replaceAll("[「,」]", ""),jpgDir.listFiles()); } } else { @@ -118,7 +124,7 @@ public class PixivUtil implements LogManger{ if(zipFile != null){ zipFile.close(); } - + FileUtils.deleteDirectory(tmpDir); } catch (IOException e) { log.error(e); } @@ -141,38 +147,36 @@ public class PixivUtil implements LogManger{ /** * jpg合成gif * @param gifName gif文件名 - * @param jpgPath jpg文件目录 + * @param */ - public static void jpgToGif(String gifName,String jpgPath,JsonNode node){ + public static void jpgToGif(String gifName,File ...jpgFile){ AnimatedGifEncoder animatedGifEncoder=new AnimatedGifEncoder(); - OutputStream outputStream= null; - InputStream inputStream=null; - File file=new File(jpgPath); - File gifDir=new File(gifPath); - if(!gifDir.exists()){ - gifDir.mkdir(); - } - File gifFile=new File(gifPath+gifName+".gif"); + InputStream inputStream; + + File gifDir=new File(imgPath+"/gif"); + gifDir.mkdirs(); + File gifFile=new File(gifDir.getAbsolutePath()+"/"+gifName+".gif"); log.info("动图将生成到"+gifFile.getAbsolutePath()); try { - gifFile.createNewFile(); + FileUtils.forceMkdirParent(gifFile); outputStream = new FileOutputStream(gifFile); animatedGifEncoder.start(outputStream); //数组转集合 - List fileList= (List) FileUtils.listFiles(file,new String[]{"jpg"},false); + List fileList= Arrays.asList(jpgFile); long a=System.currentTimeMillis(); for(File f:fileList){ //获取当前帧延迟信息 int index=fileList.indexOf(f); - int delay=node.get(index).get("delay").asInt(); +// int delay=node.get(index).get("delay").asInt(); inputStream=new FileInputStream(f.getAbsoluteFile()); BufferedImage image = ImageIO.read(inputStream); //把帧添加进去合成 animatedGifEncoder.addFrame(image); - animatedGifEncoder.setDelay(delay); +// animatedGifEncoder.setDelay(1); + log.info(gifName+":正在合成第"+((index+1)+"帧")); inputStream.close(); } @@ -190,7 +194,7 @@ public class PixivUtil implements LogManger{ if(outputStream!=null){ outputStream.close(); } - FileUtils.deleteDirectory(file); + } catch (IOException e) { e.printStackTrace();