diff --git a/core/pom.xml b/core/pom.xml
index 4ec5b84..a451dc7 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -99,6 +99,12 @@
jsoup
${jsoup.version}
+
+
+ ar.com.hjg
+ pngj
+ 2.1.0
+
core
diff --git a/core/src/main/java/org/pqh/gif/PixivUtil.java b/core/src/main/java/org/pqh/gif/PixivUtil.java
index 1fcb967..33c6e6d 100644
--- a/core/src/main/java/org/pqh/gif/PixivUtil.java
+++ b/core/src/main/java/org/pqh/gif/PixivUtil.java
@@ -6,10 +6,12 @@ import org.apache.commons.io.FileUtils;
import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
+import org.jsoup.select.Elements;
import org.pqh.core.util.LogManger;
import org.pqh.gif.gifmaker.AnimatedGifEncoder;
import javax.imageio.ImageIO;
+import javax.net.ssl.HttpsURLConnection;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
@@ -26,67 +28,84 @@ import static org.pqh.gif.PixivUtil.Image.small;
*/
public class PixivUtil implements LogManger{
private static final String host="http://i4.pixiv.net";
+ private static final String baseUrl="https://www.pixiv.net/member_illust.php?mode=medium&illust_id=";
private static final int buffer=10240;
- public static void downLoadImg(String imageUrl){
+ private static String phpsessid;
+
+
+ /**
+ * 合成动图
+ * @param illust_id
+ */
+ public static void downLoadImg(int illust_id,String phpsessid){
InputStream is = null;
FileOutputStream fos = null;
BufferedOutputStream bos = null;
ZipFile zipFile = null;
+ String imageUrl=baseUrl+illust_id;
try {
log.info("图片链接:"+imageUrl);
- Document document=Jsoup.connect(imageUrl).header("Cookie","PHPSESSID=11866657_32c3f92f0e2bf8b1607dabc04eecf787;").get();
- String script=document.select("#wrapper>script").html();
- int start=script.indexOf(small.keyword);
- int end=script.indexOf(big.keyword);
- if(start>-1&&end>-1) {
- String json = script.substring(start, end).replaceAll(".*=", "");
- ObjectMapper objectMapper = new ObjectMapper();
- JsonNode node = objectMapper.readTree(json);
- String src=node.get("src").asText().replace(small.size,big.size);
- log.info("获取到图包地址:"+src);
- Connection connection= Jsoup.connect(src).header("referer",host).ignoreContentType(true);
- connection.request().maxBodySize(1024*1024*1024);
- Connection.Response response=connection.execute();
- log.info("图包体积:"+response.header("content-length"));
- String zipName=src.substring(src.lastIndexOf("/")+1);
- File file=new File("tmp/images/"+zipName);
- FileUtils.writeByteArrayToFile(file,response.bodyAsBytes());
- log.info("图包下载到:"+file.getAbsolutePath());
- zipFile=new ZipFile(file);
- Enumeration entrys=zipFile.entries();
-
- log.info("开始解压");
-
- long a= System.currentTimeMillis();
- String path=file.getAbsolutePath().replace(".zip","");
- 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);
- log.info("开始解压图片到:"+imgFile.getAbsolutePath());
- byte buf[]=new byte[buffer];
- fos=new FileOutputStream(imgFile);
- bos=new BufferedOutputStream(fos,buffer);
- int count;
- while((count=is.read(buf))>-1){
- bos.write(buf,0,count);
+ Connection.Response response=Jsoup.connect(imageUrl).cookie("PHPSESSID",phpsessid).execute();
+ if(response.statusCode()== HttpsURLConnection.HTTP_OK) {
+ Document document=response.parse();
+ Elements imgEle=document.select("img.original-image");
+ if(imgEle.size()==1){
+ String src=imgEle.first().attr("data-src");
+ downLoadImg(src);
+ return;
+ }
+
+ String script = document.select("#wrapper>script").html();
+ int start = script.indexOf(small.keyword);
+ int end = script.indexOf(big.keyword);
+ if (start > -1 && end > -1) {
+ String json = script.substring(start,end).replaceAll(".*=","");
+ ObjectMapper objectMapper = new ObjectMapper();
+ JsonNode node = objectMapper.readTree(json);
+ String src = node.get("src").asText().replace(small.size, big.size);
+ log.info("获取到图包地址:" + src);
+
+ File file=downLoadImg(src);
+ zipFile = new ZipFile(file);
+ Enumeration entrys = zipFile.entries();
+
+ log.info("开始解压");
+
+ long a = System.currentTimeMillis();
+ String path = file.getAbsolutePath().replace(".zip", "");
+ 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);
+ log.info("开始解压图片到:" + imgFile.getAbsolutePath());
+ byte buf[] = new byte[buffer];
+ fos = new FileOutputStream(imgFile);
+ bos = new BufferedOutputStream(fos, buffer);
+ int count;
+ while ((count = is.read(buf)) > -1) {
+ bos.write(buf, 0, count);
+ }
+
}
- }
+ int length = new File(path).listFiles().length;
+ log.info(length + "张图片解压完毕,耗时:" + (System.currentTimeMillis() - a) + "ms");
- int length=new File(path).listFiles().length;
- log.info(length+"张图片解压完毕,耗时:"+(System.currentTimeMillis()-a)+"ms");
+ if (length > 0) {
+ jpgToGif(document.title().split("/")[0].replaceAll("[「,」]", ""), path, node.get("frames"));
+ }
- if(length>0){
- jpgToGif(document.title().split("/")[0].replaceAll("[「,」]",""),path,node.get("frames"));
+ } else {
+ log.error("图包地址获取失败");
}
-
+ }else if(response.statusCode()==HttpsURLConnection.HTTP_NOT_FOUND){
+ log.info("图片链接:"+imageUrl+"不存在");
}else{
- log.error("图包地址获取失败");
+ log.error("图片链接:"+imageUrl+"访问异常");
}
} catch (IOException e) {
e.printStackTrace();
@@ -111,6 +130,18 @@ public class PixivUtil implements LogManger{
}
+ public static File downLoadImg(String src) throws IOException {
+ Connection connection = Jsoup.connect(src).header("referer", host).ignoreContentType(true);
+ connection.request().maxBodySize(1024 * 1024 * 1024);
+ Connection.Response response = connection.execute();
+ log.info("图片资源体积:" + response.header("content-length"));
+ String zipName = src.substring(src.lastIndexOf("/") + 1);
+ File file = new File("tmp/images/" + zipName);
+ FileUtils.writeByteArrayToFile(file, response.bodyAsBytes());
+ log.info("图片资源下载到:" + file.getAbsolutePath());
+ return file;
+ }
+
/**
* jpg合成gif
* @param gifName gif文件名
@@ -118,6 +149,7 @@ public class PixivUtil implements LogManger{
*/
public static void jpgToGif(String gifName,String jpgPath,JsonNode node){
AnimatedGifEncoder animatedGifEncoder=new AnimatedGifEncoder();
+
OutputStream outputStream= null;
InputStream inputStream=null;
File file=new File(jpgPath);
@@ -142,6 +174,7 @@ public class PixivUtil implements LogManger{
//把帧添加进去合成
animatedGifEncoder.addFrame(image);
animatedGifEncoder.setDelay(delay);
+
log.info(gifName+":正在合成第"+((index+1)+"帧"));
}
//添加完所有帧开始合成