자바 구현 그룹 화상 합성

com.zovon.util 패키지; 

수입 java.awt.AlphaComposite; 
수입 java.awt.Color의; 
수입 java.awt.Font에; 
수입 java.awt.Graphics; 
수입 java.awt.Graphics2D; 
수입 java.awt.Image의; 
수입 java.awt.geom.AffineTransform; 
수입 java.awt.image.AffineTransformOp; 
수입 java.awt.image.BufferedImage; 
수입 java.io.BufferedInputStream의; 
수입 java.io.BufferedOutputStream에; 
수입 java.io.File에; 
수입 java.io.FileInputStream의; 
수입 java.io.FileNotFoundException; 
수입 java.io.FileOutputStream의; 
수입 때 java.io.IOException; 
수입 java.io.InputStream를; 
수입 java.io.OutputStream에;
수입 인 java.util.ArrayList; 
수입은 java.util.List;
 
; 오기 javax.imageio.ImageIO은 

/ ** 
 *이 클래스는 화상 처리 클래스 
 * 
 * @author 왕 YONGFENG 
 HTTP : * 소스 //www.cnblogs.com/zovon /p/4345501.html 
 * / 
공용 클래스 ImageUtil 최종 { 
    / ** 그림 형식 : JPG * / 
    민간 최종 정적 문자열 PICTRUE_FORMATE_JPG = "JPG"; 

    개인 ImageUtil () { 
    } 
/ ** 
     * 결합 된 그림을 생성 
     * 
     * @param 경로 
     사용자 이미지 * 
     * IOException이 @throws 
     * / 
    공공 정적 무효 getCombinationOfhead (목록 <문자열> 경로) 
            IOException가 {던졌습니다 
        목록 <BufferedImage의> BufferedImage의 = 새로운 새로운 ArrayList를 <BufferedImage의> (); 
        // 압축 모든 이미지 생성 화면 크기는 50 × 50 동의입니다 
        대 (INT I = 0; I <paths.size (); I ++) { 
            bufferedImages.add (ImageUtil.resize2 (paths.get (I), (50), (50) ))에 해당하는 단계; 
        } 

        INT 폭 = 112 //이되는 드로잉 보드 폭과 높이 

        INT 높이 = 112 //이 드로잉 보드의 높이 

        // BufferedImage.TYPE_INT_RGB 뷰는 API 정의 할 

        않는 BufferedImage outImage BufferedImage와 새로운 새 = (폭, 높이 
                BufferedImage.TYPE_INT_RGB); 

        // 캔버스 생성 
        = 그래픽 outImage.getGraphics G () 
        
        Graphics2D 문맥 G2D = (Graphics2D 문맥) G; 
        
        // 배경색 세트 
        g2d.setBackground (신규 새로운 컬러 (231,231,231)) 
        
        를 사용하여 // 현재 도면 배경 색상의 표면을 작성하여 지정된 사각형을 취소합니다.
        g2d.clearRect (0, 0, 폭, 높이); 
         
        // 픽처 개시에 따른 조립 생성 된 패턴이 결정된다 화상의 조합의 수 (4) 현재 
        INT J = 1;
        위한 (INT 난 = 1; I <= bufferedImages.size (); I ++) { 
            경우 (bufferedImages.size () == 4) { 
                (I <= 2) {경우 
                    g2d.drawImage (bufferedImages.get (I - 1 ) (50)는 I + 4 * I 
                            - 50, 4, NULL); 
                사용한다} else { 
                    g2d.drawImage (bufferedImages.get (I - 1) * 50 + 4 * J J 
                            - 50, 58, NULL); 
                    J ++; 
                } 
            } 다른 경우 (bufferedImages.size () == 3) { 
                경우 (ⅰ <= 1) { 

                    g2d.drawImage (bufferedImages.get (I - 1), 31 (4), NULL); 

                } 다른 {

                    g2d.drawImage (bufferedImages.get (I - 1) * 50 * J + J. 4. 
                            - 50, 58, NULL); 

                    J ++; 
                } 

            }는 다른 IF (bufferedImages.size () == 2) { 

                g2d.drawImage (BufferedImage의 갔지. (I - 1), 50 * I가 + I * 4 - (50). 
                        (31)는, NULL); 

            .}는 다른 IF (bufferedImages.size () == 1) { 

                g2d.drawImage (. bufferedImages.get (I - 1) 31, 31이며, 널 (null))이다 

            } 

            // 여기에 그린 컬러의 색상을 변경하는 것이 필요합니다. 클래스가하는 AlphaComposite 사용할 수 있습니다 
        } 

        문자열 outPath = "E : \\ b.jpg를"; 

        문자열 형식 = "JPG"; 

        ImageIO.write (outImage, 형식, 새로운 새로운 파일 (outPath));
    } 

    / ** 
     * 이미지 줌 
     * 
     * @param적인 filePath 
     * 이미지 경로 
     * @param 높이 
     * 높이 
     * @param 폭 
     * 폭 
     * @param BB 
     * 비율이 패딩을 필요로하지 않는다 
     * / 
    BufferedImage를 (문자열적인 filePath resize2 공용 static, INT 높이 , INT 폭, 
            부울 BB) { 
        은 try { 
            더블 비 = 0; // 확장 
            파일 F = 새로운 새로운 파일 (적인 filePath); 
            BufferedImage를 ImageIO.read BI = (F) 
            //이 비율을 계산 
            이미지 Itemp bi.getScaledInstance = (폭, 높이,
                    Image.SCALE_SMOOTH);  
                // copyimg (여기서 filePath "D : \\ IMG를");
            경우 ((bi.getHeight ()> 높이) || (bi.getWidth ()> 폭)) { 
                경우 (bi.getHeight ()> bi.getWidth ()) { 
                    비율 = (새로운 정수 (높이)).있는 doubleValue () 
                            / bi.getHeight (); 
                사용한다} else { 
                    비율 = (새로운 정수 (폭))있는 doubleValue () / bi.getWidth ().; 
                } 
                는, AffineTransformOp 연산 새로운는, AffineTransformOp을 = ( 
                        AffineTransform.getScaleInstance (비 비), NULL); 
                itemp = op.filter (BI, NULL); 
            } 
            경우 (BB) { 
                BufferedImage의 이미지 = 새로운 BufferedImage의 (폭, 높이, 
                        BufferedImage.TYPE_INT_RGB); 
                Graphics2D의 g = image.createGraphics (); 
                g.setColor (Color.white); 
                g.fillRect (0, 0, 폭, 높이); 
                (폭 == itemp.getWidth (NULL)) 경우 
                    itemp.getHeight (NULL)) / 2 - g.drawImage (itemp 0 (높이 
                            itemp.getWidth (NULL) itemp.getHeight (NULL) 
                            Color.white , 없는); 
                다른 
                    g.drawImage (itemp (너비 - itemp.getWidth (NULL)) / 2, 0, 
                            itemp.getWidth (NULL) itemp.getHeight (NULL) 
                            Color.white, NULL); 
                () g.dispose; 
                itemp는 이미지 =; 
            }
            창 (BufferedImage의) itemp; 
        } 캐치 (IOException이 전자) { 
            e.printStackTrace (); 
        } 
        NULL을 반환; 
    } 

}

  전송 : HTTPS : //www.cnblogs.com/zovon/p/4345501.html

추천

출처www.cnblogs.com/wangyu19900123/p/12212722.html