자바 그림 재단 및 미리 보기 그림 생 성 인 스 턴 스 방법
9314 단어 자바그림.재단 하 다.그림 미리 보기 그림
앨범 을 탐색 할 때 미리 보기 그림 을 만들어 야 할 수도 있 습 니 다.
직접 코드 올 리 기:
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 요청 에 무효 한 문제 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.작은 편집 자 는 신속하게 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.