팡이네

마이플랫폼에서 Base64 이미지 문자열을 이미지 컴포넌트에 표시하고자 할 때

java 단에서 먼저 해당 컬럼을  DB에서 조회한 다음 일반적인 DRRecordSet으로 반환하면

String 데이터 컬럼으로 변환되어 이미지 컴포넌트에 표시하지 못한다.


그래서 DRRecordSet을 새로 생성하여 해당 컬럼을 BLOB로 만들어서 반환하면

이미지 컴포넌트에서 이미지를 제대로 표시할 수 있다.


DSRecordSet rs = DB에서 조회한 목록


DSRecordSet rs2 = new DSRecordSet();

rs2.addColumn("base64Image", ColumnInfo.CY_COLINFO_BLOB, -1);


for (int i = 0; i < rs.getRowCount(); i++) {

int row = rs2.appendRow();

String imageData = rs.getColumn(row, "base64Image").toString();

rs2.setColumn(row, "base64Image", Base64.decode(imageData.getBytes()));

}


생성한 rs2를 반환한다.


이후 마이플랫폼에서 원하는 이미지 컴포넌트에 표시한다.


imgPhoto.ImageID = ds.GetColumn(nRow, 'base64Image');


단, 여기서 주의할 점은 이미지 컴포넌트 imgPhoto의 ImageID 값은 항상 null 이다.

그래서 if (imgPhoto.ImageID != '')와 같은 구문은 항상 거짓이 된다.


그리고 이미지 컴포넌트의 이미지를 지우거나 초기화할 경우 빈문자열 대신 null을 이용한다. imgPhoto.ImageID = null

이미지 크기 조절

/**
 * 사진 이미지 크기 조절
 * @param img
 * @param width
 * @param height
 * @return
 */
private BufferedImage resizeImage(BufferedImage img, int width, int height) {
	//int type = img.getType() == 0 ? BufferedImage.TYPE_INT_ARGB : img.getType();			//png = TYPE_INT_ARGB
	
	Image tmp = img.getScaledInstance(width, height, Image.SCALE_SMOOTH);
	BufferedImage resized = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);	//jpeg = TYPE_INT_RGB
	Graphics2D g2d = resized.createGraphics();
	g2d.drawImage(tmp, 0, 0, null);
	g2d.dispose();
	return resized;
}

사진 이미지 Base 64 문자열 변환

private String resizePhoto(String filePath, int MAX_SIZE) {
	try {
		ByteArrayOutputStream os = new ByteArrayOutputStream();
		
		//업로드 된 이미지(원본) 파일 읽기
		File file = new File(filePath);
		BufferedImage orgImage = ImageIO.read(file);
		BufferedImage resizedImage = null;
		
		int imageWidth = orgImage.getWidth();
		int imageHeight = orgImage.getHeight();
		
		//가로가 긴 이미지
		if (imageWidth > imageHeight) {
			if (imageWidth > MAX_SIZE) {
				double height = (double)imageHeight / (double)imageWidth * (double)MAX_SIZE;
				//가로 크기 = MAX_SIZE, 세로 크기 = height
				resizedImage = resizeImage(orgImage, MAX_SIZE, (int)height);
			}
		//세로가 긴 이미지
		} else {
			if (imageHeight > MAX_SIZE) {
				double width = (double)imageWidth / (double)imageHeight * (double)MAX_SIZE;
				//가로크기 = width, 세로 크기 = MAX_SIZE
				resizedImage = resizeImage(orgImage, (int)width, MAX_SIZE);
			}
		}
		
		//이미지 크기 변경 = resizedImage 아니면 원본 이미지 = orgImage
		ImageIO.write((resizedImage != null) ? resizedImage : orgImage, "jpeg", os);
		
		return Base64.getEncoder().encodeToString(os.toByteArray());	//base64 문자열 변환
	} catch (FileNotFoundException ex) {
		System.out.println("▶▶▶ File not found in [resizePhoto] " + ex);
	} catch (IOException ex) {
		System.out.println("▶▶▶ Error in [resizePhoto] " + ex);
	}
	
	return null;
}

'Java' 카테고리의 다른 글

날짜 관련 유틸리티  (0) 2018.10.23
JDK 8 인스톨 없이 설치하기  (0) 2018.10.20
POI, Excel 셀 생성  (0) 2015.06.30
POI, Excel 숫자 셀 생성  (0) 2015.06.30
POI, Excel 병합 셀 생성  (0) 2015.06.30