자바 코드 로 그림 크기 조정

4294 단어 자바
이 코드 는 코드 로 그림 사 이 즈 를 수정 하 는 코드 입 니 다.정적 인 방법 이 니까 직접 유형 명 방법 명 을 붙 이면 돼!당연 하지,정적 으로 안 해도 돼!그러나 이 코드 에 문제 가 있 습 니 다.즉,그 가 그림 을 바 꾼 후에 약간 왜곡 되 었 습 니 다.그림 이 높 지 않 아서 해결 해 야 합 니 다.더 좋 은 방법 이 있다 면 여러분 이 제기 한 것 을 환영 합 니 다.모두 가 함께 발전 하 잖 아 요.
/**
 *       
 * @param srcFileName      
 * @param tagFileName       
 * @param width       
 * @param height       
 */
public static void updateImageSize(String srcFileName, String tagFileName,
     int width, int height) {
    // TODO Auto-generated method stub
    try {
        BufferedImage bi = ImageIO.read(new File(srcFileName));
        BufferedImage tag =
            new BufferedImage(width,height, BufferedImage.TYPE_INT_RGB);
        tag.getGraphics().drawImage(bi, 0, 0, width, height, null);
        ImageIO.write(tag, "jpg", new File(tagFileName));
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

       아래 의 이 코드 는 saveImageAsJpg()방법 을 호출 합 니 다!위의 resize()가 saveImageAsJpg()에 호출 되 었 으 니 하나만 조정 하면 됩 니 다!아래 의 방법 을 사용 하면 확대 해서 나 온 그림 이 위의 것 보다 선명 해 야 합 니 다.구체 적 인 원인 은 저도 잘 모 르 겠 습 니 다.저도 인터넷 에서 찾 은 것 입 니 다.그리고 하나씩 시험 해 본 다음 에 여러분 과 공유 하 겠 습 니 다.만약 에 원인 을 아 는 것 이 있 으 면 저희 에 게 말씀 해 주세요.같이 발전 하 겠 습 니 다.
/**
 *       
 * @param source     
 * @param targetW        
 * @param targetH        
 * @return
 */
public static BufferedImage resize(BufferedImage source, int targetW, int targetH) {
    // targetW,targetH         
    int type = source.getType();
    BufferedImage target = null;
    double sx = (double) targetW / source.getWidth();
    double sy = (double) targetH / source.getHeight();
    //      targetW,targetH         。         
    //     if else      
    if(sx>sy) {
        sx = sy;
        targetW = (int)(sx * source.getWidth());
    } else {
        sy = sx;
        targetH = (int)(sy * source.getHeight());
    }
    if (type == BufferedImage.TYPE_CUSTOM) { //handmade
        ColorModel cm = source.getColorModel();
        WritableRaster raster = cm.createCompatibleWritableRaster(targetW, targetH);
        boolean alphaPremultiplied = cm.isAlphaPremultiplied();
        target = new BufferedImage(cm, raster, alphaPremultiplied, null);
    } else {
        target = new BufferedImage(targetW, targetH, type);
    }
    Graphics2D g = target.createGraphics();
    //smoother than exlax:
    g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY );
    g.drawRenderedImage(source, AffineTransform.getScaleInstance(sx, sy));
    g.dispose();
    return target;
}
                    
/**
 *     
 * @param fromFileStr      
 * @param saveToFileStr       
 * @param width     
 * @param height     
 * @throws Exception     
 */
public static void saveImageAsJpg (String fromFileStr,String saveToFileStr,int width,int height)
            throws Exception {
    BufferedImage srcImage;
    // String ex = fromFileStr.substring(fromFileStr.indexOf("."),fromFileStr.length());
    String imgType = "JPEG";
    if (fromFileStr.toLowerCase().endsWith(".png")) {
        imgType = "PNG";
    }
    // System.out.println(ex);
    File saveFile=new File(saveToFileStr);
    File fromFile=new File(fromFileStr);
    srcImage = ImageIO.read(fromFile);
    if(width > 0 || height > 0) {
        srcImage = resize(srcImage, width, height);
    }
    ImageIO.write(srcImage, imgType, saveFile);
}

       더 좋 은 방법 이 있 으 신 분 들 은 여러분 과 나 눠 드 리 겠 습 니 다.6 군 은 먼저 감 사 드 립 니 다!사실 저 는 제일 먼저 PDF 를 그림 으로 바 꾸 고 싶 었 는데 잘 모 르 겠 어 요.jar 가방 도 써 야 돼 요!그리고 PDF 는 한 페이지 만 괜 찮 습 니 다.한 장의 그림 이 나 왔 지만 페이지 가 많 으 면 돌아 온 그림 이 많 습 니 다!나 도 좋 은 방법 이 없 기 때문에 가 는 김 에 물 어보 세 요.어떻게 PDF 에서 나 오 는 그림 을 PDF 가 몇 페이지 가 있 든 지 간 에 그림 은 한 장 입 니 다!jar 가방 을 사용 하지 않 는 것 이 가장 좋 습 니 다.하지만 솔직히 jar 가방 도 좋 은 물건 입 니 다.이런 효과 가 좋 은 jar 가방 이 있다 면 추천 해 주세요.감사합니다.

좋은 웹페이지 즐겨찾기