자바 그림 재단 및 미리 보기 그림 생 성 인 스 턴 스 방법

미리 보기
앨범 을 탐색 할 때 미리 보기 그림 을 만들어 야 할 수도 있 습 니 다.
직접 코드 올 리 기:

public class ImageUtil {
 private Logger log = LoggerFactory.getLogger(getClass());
 private static String DEFAULT_PREVFIX = "thumb_";
 private static Boolean DEFAULT_FORCE = false;//     false
 /**
  * <p>Title: thumbnailImage</p>
  * <p>Description:             </p>
  * @param imagePath      
  * @param w       
  * @param h       
  * @param prevfix         
  * @param force               (   false,          )
  */
 public void thumbnailImage(String imagePath, int w, int h, String prevfix, boolean force){
  File imgFile = new File(imagePath);
  if(imgFile.exists()){
   try {
    // ImageIO         : [BMP, bmp, jpg, JPG, wbmp, jpeg, png, PNG, JPEG, WBMP, GIF, gif]
    String types = Arrays.toString(ImageIO.getReaderFormatNames());
    String suffix = null;
    //       
    if(imgFile.getName().indexOf(".") > -1) {
     suffix = imgFile.getName().substring(imgFile.getName().lastIndexOf(".") + 1);
    }//            ,          
    if(suffix == null || types.toLowerCase().indexOf(suffix.toLowerCase()) < 0){
     log.error("Sorry, the image suffix is illegal. the standard image suffix is {}." + types);
     return ;
    }
    log.debug("target image's size, width:{}, height:{}.",w,h);
    Image img = ImageIO.read(imgFile);
    if(!force){
     //              ,           
     int width = img.getWidth(null);
     int height = img.getHeight(null);
     if((width*1.0)/w < (height*1.0)/h){
      if(width > w){
       h = Integer.parseInt(new java.text.DecimalFormat("0").format(height * w/(width*1.0)));
       log.debug("change image's height, width:{}, height:{}.",w,h);
      }
     } else {
      if(height > h){
       w = Integer.parseInt(new java.text.DecimalFormat("0").format(width * h/(height*1.0)));
       log.debug("change image's width, width:{}, height:{}.",w,h);
      }
     }
    }
    BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
    Graphics g = bi.getGraphics();
    g.drawImage(img, 0, 0, w, h, Color.LIGHT_GRAY, null);
    g.dispose();
    String p = imgFile.getPath();
    //               
    ImageIO.write(bi, suffix, new File(p.substring(0,p.lastIndexOf(File.separator)) + File.separator + prevfix +imgFile.getName()));
    log.debug("            ");
   } catch (IOException e) {
    log.error("generate thumbnail image failed.",e);
   }
  }else{
   log.warn("the image is not exist.");
  }
 }
 public static void main(String[] args) {
  new ImageUtil().thumbnailImage("C:/Users/cm/Desktop/    /images/girlNoImg.jpg", 100, 150,DEFAULT_PREVFIX,DEFAULT_FORCE);
 }
}
main 방법 을 직접 실행 하고 해당 하 는 인 자 를 입력 하면 됩 니 다.
2.js 에 맞 춰 재단 그림 생 성
우리 가 개인 웨 이 보,qq 자 료 를 수정 할 때 개인 프로필 사진 을 올 릴 수 있 고 개인 프로필 사진 을 재단 해서 올 릴 수 있다.그림 을 자 르 는 크기 스타일 은 자 바스 크 립 트 를 통 해 이 루어 지지 만 새로운 그림 을 만 들 수 없습니다.그러나 js 커팅 그림 은 그림 의 x,y 좌표 와 너비,높이 를 제공 합 니 다.이 네 가지 매개 변 수 를 통 해 우 리 는 원래 그림 에 따라 새로운 커팅 그림 을 만 들 수 있 습 니 다.
단계:
1.먼저 페이지 를 통 해 js 를 이용 하여 이미지 편집 조회 기능 을 실현 합 니 다.저 는 모 과 망 이 제공 한 자 료 를 참조 하여 조금 바 꾸 었 습 니 다.또한 우 리 는 플러그 인 을 사용 할 수 있 습 니 다.예 를 들 어 Jcrop 은 아주 좋 은 그림 재단 플러그 인 입 니 다.
다운로드 주소:http://download.csdn.net/detail/u012385190/9733480
这里写图片描述  
마지막 효과 도 는 위 와 같 습 니 다.왼쪽 은 드래그 할 수 있 고 오른쪽 은 미리 보기 그림 입 니 다.
2.자바 생 성 및 편집 그림 저장

public class ImageUtil2 {
 private Logger log = LoggerFactory.getLogger(getClass());
 private static String DEFAULT_CUT_PREVFIX = "cut_";
 /**
  * Description:        size      
  * @param srcImg    
  * @param output      
  * @param rect             
  */
 public void cutImage(File srcImg, OutputStream output,java.awt.Rectangle rect) {
  if (srcImg.exists()) {
   java.io.FileInputStream fis = null;
   ImageInputStream iis = null;
   try {
    fis = new FileInputStream(srcImg);
    // ImageIO         : [BMP, bmp, jpg, JPG, wbmp, jpeg, png, PNG,
    // JPEG, WBMP, GIF, gif]
    String types = Arrays.toString(ImageIO.getReaderFormatNames())
      .replace("]", ",");
    String suffix = null;
    //       
    if (srcImg.getName().indexOf(".") > -1) {
     suffix = srcImg.getName().substring(srcImg.getName().lastIndexOf(".") + 1);
    }//            ,          
    if (suffix == null
      || types.toLowerCase().indexOf(suffix.toLowerCase() + ",") < 0) {
     log.error("Sorry, the image suffix is illegal. the standard image suffix is {}."+ types);
     return;
    }
    //  FileInputStream    ImageInputStream
    iis = ImageIO.createImageInputStream(fis);
    //              ImageReader
    ImageReader reader = ImageIO.getImageReadersBySuffix(suffix).next();
    reader.setInput(iis, true);
    ImageReadParam param = reader.getDefaultReadParam();
    param.setSourceRegion(rect);
    BufferedImage bi = reader.read(0, param);
    ImageIO.write(bi, suffix, output);
    log.info("      ,       ");
   } catch (FileNotFoundException e) {
    e.printStackTrace();
   } catch (IOException e) {
    e.printStackTrace();
   } finally {
    try {
     if (fis != null)
      fis.close();
     if (iis != null)
      iis.close();
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
  } else {
   log.warn("the src image is not exist.");
  }
 }
 //        
 public void cutImage(File srcImg, String destImgPath,java.awt.Rectangle rect) {
  File destImg = new File(destImgPath);
  if (destImg.exists()) {
   String p = destImg.getPath();
   try {
    if (!destImg.isDirectory())
     p = destImg.getParent();
    if (!p.endsWith(File.separator))
     p = p + File.separator;
    cutImage(srcImg,new java.io.FileOutputStream(p + DEFAULT_CUT_PREVFIX+ "_"+ srcImg.getName()), rect);
   } catch (FileNotFoundException e) {
    log.warn("the dest image is not exist.");
   }
  } else
   log.warn("the dest image folder is not exist.");
 }
 public void cutImage(String srcImg, String destImg, int x, int y, int width,
   int height) {
  cutImage(new File(srcImg), destImg, new java.awt.Rectangle(x, y, width, height));
 }
 public static void main(String[] args) {
  new ImageUtil2().cutImage("C:/Users/cm/Desktop/    /images/boyNoImg.jpg", "C:/Users/cm/Desktop/    /images/imgs",0, 0, 61, 166);
  //new ImageUtil2().cutImage("C:/Users/cm/Desktop/Jcrop-master/demos/demo_files/sago.jpg", "C:/Users/cm/Desktop/    /images/imgs",124, 110, 196, 176);
 }
}
이 방법 은 main 에서 직접 실행 할 수 있다.들 어 오 는 네 개의 매개 변 수 는 이미지 경로,left 값,top 값,길이,너비 입 니 다.
이 네 개의 인 자 를 어떻게 얻 는 지 분석 해 보 겠 습 니 다.
1.나의 js 절 체 를 예 로 들 면 F12 를 통 해 다음 과 같은 것 을 얻 을 수 있 습 니 다.
这里写图片描述  
그림 의 빨간색 부분 은 바로 그림 을 자 르 는 div 입 니 다.우 리 는 커팅 구역 의 크기 너비 등 을 끌 어 당 겨 서 어떤 매개 변 수 를 바 꾸 었 는 지 관찰 한 다음 에 구체 적 으로 대응 하 는 매개 변수 값 이 각각 어떤 매개 변수 값 에 대응 하 는 지 확인 할 수 있 습 니 다.예 를 들 어 사진 속 나의 x/y/width/height 는 각각 40,28,224,228 이다.
주의:js 에서 저 는 이 div 와 그림 의 길 이 를 모두 300*300 으로 정 의 했 습 니 다.테스트 에 맞 추기 위해 제 가 다운로드 한 그림 도 300*300 입 니 다.만약 당신 이 테스트 한 그림 의 크기 가 300*300 이 아니라면,당신 이 직접 위 자바 에서 테스트 한 효 과 는 당신 의 전단 에서 본 것 과 다 를 것 입 니 다.당신 의 전단 의 그림 너비 가 300*300 이 라 고 정의 하 는데,당신 의 실제 그림(즉 자바 의 그림)은 아 닙 니 다.
그럼 이 문 제 를 처리 하면 요?
자바 코드 에서 원 그림 의 길 이 를 가 져 온 다음 원 그림 의 길이 가 300*300 인지 판단 하고 그렇지 않 으 면 이 그림 의 300*300 미리 보기 그림 을 생 성 한 다음 300*300 미리 보기 그림 을 재단 한 그림 의 원형 으로 합 니 다.(내 코드 에 처리 되 지 않 았 습 니 다.필요 한 것 은 스스로 처리 하고 그림 을 다 쓴 후에 미리 보기 그림 을 삭제 합 니 다)
2,Jcrop 매개 변수 가 져 오기
这里写图片描述
그림 과 같이 Jcrop 은 직접 인 자 를 제공 하여 직접 사용 할 수 있 습 니 다.그러나 이 단점 은 전단 페이지 의 그림 크기 영역 이 고정 되 어 있 지 않다 는 것 입 니 다.만약 에 큰 픽 셀 그림 이 있다 면 매우 추 할 것 입 니 다.예 를 들 어 제 가 대응 하 는 파일 에 그림 soga 가 있 습 니 다.bak.jpg,이 그림 으로 바 꾸 면 안 돼 요.
따라서 첫 번 째 js 를 사용 한 다음 에 원래 그림 의 길이 와 너비 가 300 인지 아 닌 지 판단 하고 300*300 미리 보기 그림 을 생 성 한 다음 에 미리 보기 그림 을 재단 원형 그림 으로 하고 다 쓴 다음 에 미리 보기 그림 을 삭제 하 는 것 을 권장 합 니 다.
위 에서 말 한 것 은 작은 편집 이 여러분 에 게 소개 한 자바 이미지 재단 과 미리 보기 그림 을 만 드 는 인 스 턴 스 방법 입 니 다.Get 요청 에 무효 한 문제 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.작은 편집 자 는 신속하게 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기