Java는 네트워크 그림을 읽고 로컬에 저장하고 썸네일을 생성합니다.

이전에는 Python 크롤러를 사용하여 내 웹 사이트의 데이터 소스로 영화 웹 사이트 정보를 가져 왔습니다. 여기에 포함 된 사진은 모두 네트워크 사진이었습니다. 다음과 같은 문제가있을 수 있습니다.

원본 웹 사이트의 액세스 속도가 상대적으로 느리면 웹 사이트 사진의 로딩 시간도 매우 느려지고 원본 웹 사이트가 다운되면 사진에 직접 액세스 할 수 없습니다.

현재 사용자 경험이 매우 나쁘기 때문에 최적화되었습니다.

백엔드가 시작될 때마다 작업이 기본적으로 열립니다. 먼저 변환되지 않은 네트워크 사진을 로컬에 저장 한 다음 웹 페이지의 사진 목록을 변경하여 로컬 사진에 액세스하면 느린로드 문제를 해결하고 커플 링을 줄입니다. 원본 웹 사이트로. 구체적인 단계는 다음과 같습니다.

1. 사진을 저장할 폴더 만들기

내 저장 경로 : F : \ images

2. 이미지 변환을위한 새 createLocalImage 클래스를 만듭니다.

package com.cn.beauty.task;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;

public class createLocalImage {
    
    
	// 需要保存到本地的根路径
    private static String basePath = "F:/";

    public static void main(String[] args) {
    
    
    	// 网页图片路径
        String destUrl = "http://5b0988e595225.cdn.sohucs.com/images/20200215/349bb3cb88b744dcb67f37dba2f71abf.jpeg";
        String filePath = createLocalImageMethod(destUrl);
        System.out.println("生成的相对文件路径为" + filePath);
    }

    private static String createLocalImageMethod(String destUrl) {
    
    
        FileOutputStream fos = null;
        BufferedInputStream bis = null;
        HttpURLConnection httpUrl = null;
        URL url = null;
        int BUFFER_SIZE = 1024;
        byte[] buf = new byte[BUFFER_SIZE];
        int size = 0;
        String filePath = "";
        try {
    
    
            System.out.println("原始图片URL为:" + destUrl);
            String[] fileNameArray = destUrl.split("\\/");
            if (fileNameArray.length > 1) {
    
    
                String fileName = fileNameArray[fileNameArray.length - 1];
                filePath = "images/" + fileName;
                File file = new File(basePath + filePath);
                if (!file.exists()) {
    
    
                    url = new URL(destUrl);
                    httpUrl = (HttpURLConnection) url.openConnection();
                    httpUrl.connect();
                    bis = new BufferedInputStream(httpUrl.getInputStream());
                    fos = new FileOutputStream(basePath + filePath);
                    while ((size = bis.read(buf)) != -1) {
    
    
                        fos.write(buf, 0, size);
                    }
                    fos.flush();
                }
                // 后续对图片进行缩略图处理,见后面代码
            }
        } catch (IOException e) {
    
    
            e.printStackTrace();
        } catch (ClassCastException e) {
    
    
            e.printStackTrace();
        } finally {
    
    
            try {
    
    
                fos.close();
                bis.close();
                httpUrl.disconnect();
            } catch (IOException e) {
    
    
            } catch (NullPointerException e) {
    
    
            }
        }
        return filePath;
    }
}

실행 후 이미지가 성공적으로 생성되었음을 확인합니다.

여기에 사진 설명 삽입
3. 썸네일 생성

사진 목록의 표시 인 경우 원본 사진이 너무 크거나 로딩 속도에 영향을 미칠 수 있습니다.이 때 사진을 썸네일로 처리하여 표시 할 수 있습니다.

다음과 같은 기능을 지원하는 매우 강력한 이미지 처리 도구 클래스 인 Thumbnails를 사용합니다.

  • 지정된 크기에 따라 크기를 조정하십시오.
  • 비율에 따라 크기 조정;
  • 규모에 따라 크기를 조정하지 말고 크기를 지정하십시오.
  • 회전, 워터 마크, 자르기;
  • 이미지 형식 변환;
  • OutputStream에 출력;
  • BufferedImage로 출력;

여기서 요구 사항은 비교적 간단하며 지정된 크기로 조정하는 기능 만 사용됩니다.

해당하는 jar 패키지를 소개합니다.

<dependency>
      <groupId>net.coobird</groupId>
      <artifactId>thumbnailator</artifactId>
      <version>0.4.8</version>
</dependency>

createLocalImage 메소드에서 썸네일 생성의 코드 구현을 추가하십시오.

	String thumbName = fileName.split("\\.")[0] + "_thumb." + fileName.split("\\.")[1];
    String thumbPath = basePath + filePath.replace(fileName, thumbName);
    //将要转换出的小图文件
    File fo = new File(thumbPath);
    if (fo.exists()) {
    
    
         return thumbPath;
    }
    // 第一个参数是原始图片的路径,第二个是缩略图的路径
    Thumbnails.of(basePath + filePath).size(120, 120).toFile(thumbPath);
    System.out.println("生成的缩略图路径为:" + thumbPath);

다시 실행하여 축소판이 성공적으로 생성되었는지 확인합니다.
여기에 사진 설명 삽입

추천

출처blog.csdn.net/j1231230/article/details/115281229