이 기사에서는 Java의 절단을위한 이미지를 업로드하는 방법에 대해 설명합니다. 참조를 위해 공유하십시오. 특정 분석은 다음과 같습니다.
업로드 된 사진을 자르고 싶습니까? 내 프로젝트의 사진은 부서 로고를 선택할 수 있지만 브라우저 호환성과 스트레칭을 처리하기 위해 이미지를 왼쪽, 중간, 오른쪽으로 자릅니다. 나머지 부분은 왼쪽 및 중간 변경에 패턴이나 문자가있을 수 있으므로 오른쪽 부분 만 스트레칭 할 수 없으며 나머지 부분은 조정할 수 있습니다. 그래서 나는 Javax의 이미지를 사용하여 작동했습니다. 마지막으로 데이터베이스를 Blob 유형으로 저장하십시오.
먼저 양식 형식으로 ENCTYPE = "multipart/form-data"를 씁니다
코드 코드를 다음과 같이 복사하십시오.
다음은 구성 요소 복사 코드를 업로드하기위한 다음 코드입니다. <tr>
<td>
<strong> 로고를 업로드 : </strong>
<입력 유형 = "hidden"name = "접미사"id = "접미사"value = "$ {fection.departmentlogo.suffix}"/>
</td>
<td>
<입력 유형 = "파일"이름 = "logofile"id = "logofile"onchange = "Checkfile ();"/>
</td>
</tr>
<tr>
<td> </td>
<td>
<span> (이미지 형식 : jpg, jpeg, bmp, gif, png; </span> <br/>
<Span> 권장 크기 : 1120 × 80 픽셀) </span>
</td>
</tr>
CheckFile () 이미지 확인 방법은 이미지가 지정된 형식으로 끝나는 지 확인하는 데 사용됩니다. 다음과 같이 선택된 사본 코드 코드가 없는지 확인합니다.
var value = $ ( "#logofile"). val ();
if (! value) {
Alert ( "업로드 할 사진을 선택하십시오!");
거짓을 반환합니다.
}또 다른{
if (value.lastindexof ( ". jpg")! = -1) {
$ ( "#접미사"). val ( "jpg");
진실을 반환하십시오.
} else if (value.lastIndexof ( ". jpeg")! = -1) {
$ ( "#접미사"). val ( "jpeg");
진실을 반환하십시오.
} else if (value.lastIndexof ( ". gif")! = -1) {
$ ( "#접미사"). val ( "gif");
진실을 반환하십시오.
} else if (value.lastIndexof ( ". bmp")! = -1) {
$ ( "#접미사"). val ( "bmp");
진실을 반환하십시오.
} else if (value.lastIndexof ( ". png")! = -1) {
$ ( "#접미사"). val ( "png");
진실을 반환하십시오.
}또 다른{
ALERT ( "죄송합니다. 업로드 한 파일 형식이 올바르지 않습니다. 지정된 형식의 이미지 파일을 업로드 할 수 있습니다");
거짓을 반환합니다.
}
}
}
다음은 백그라운드 저장 작업입니다.
다음과 같이 코드를 복사하십시오 : public string save ()는 예외 {
httpservletrequest 요청 = servletactionContext.getRequest ();
String LeaveRid = request.getParameter ( "id");
String liversname = request.getParameter ( "name");
문자열 companyId = request.getParameter ( "companyId");
// 사진 접미사
문자열 접미사 = request.getParameter ( "접미사");
List <메뉴> ListMenu = New ArrayList <메뉴> ();
회사 회사 = 새로운 회사 ();
Company.SetId (long.valueof (companyId));
if (this.logofile! = null && liffname! = null && companyId! = null && 접미사! = null) {
// 이미지를 구문 분석하기위한 이미지 가장자리를 얻습니다
반복자 <ImageReader> imageReaders = imageio.getImagerEadersByFormatName (접미사);
ImageReader imageReader = imageReaders.next ();
// 바이트 스트림 형식으로 이미지를 전달합니다.
inputStream logoStream = new bufferedInputStream (new FileInputStream (this.logofile));
// 사진 입력 스트림으로 변환합니다
imageInputStream imageInputStream = imageio.createImageInputStream (logoStream);
imageReader.setInput (imageInputStream, true);
int imageWidth = imageReader.getWidth (0);
// 고정 높이 80
int imageHeight = 80;
// 왼쪽, 중앙, 오른쪽 및 남은 너비를 설정합니다
int leftWidth = imageWidth / 2;
int middlewidth = (imageWidth -LeftWidth) / 3;
int rightwidth = 5;
int retainwidth = imageWidth- leftWidth -middleWidth -5;
imageEadparam readParam = imageReader.getDefaultReadParam ();
BufferedImage bimage = null;
// 왼쪽 절반을 자릅니다
// 너비와 높이를 기준으로 사각형을 얻습니다
사각형 LeftImagerEctangle = 새로운 사각형 (0, 0, LeftWidth, ImageHeight);
readparam.setsourceregion (leftimagerEctangle);
bimage = imageReader.read (0, readparam);
// 바이트 배열 출력 스트림
BytearRayoutputStream LeftByTearRayoutputStream = New ByTearRayoutputStream ();
imageio.write (bimage, 접미사, LeftByTearRayoutputStream);
// 바이트 배열을 가져옵니다
BYTE [] LEFTIMAGEDATA = LEFTBYTERRAYOUTPUTSTREAM.TOBYTERRAY ();
LeftByTearRayoutputStream.close ();
// Hibernate는 Blob 유형을 만듭니다
Blob LeftBlob = hibernate.createBlob (LeftImagedata, this.departmentmanager.getSession ());
// 중간 부분을 자릅니다
사각형 MiddleImagerEctangle = 새로운 사각형 (LeftWidth, 0, Middlewidth, ImageHeight);
readparam.setsourceregion (middleimagerectangle);
bimage = imageReader.read (0, readparam);
BYTEARRAYOUTSTREAM MIDDLEARRAYOUTPUTSTREAM = NEW BYTEARRAYOUTPUTSTREAM ();
imageio.write (bimage, 접미사, middlearrayoutputstream);
BYTE [] MiddleImagedata = middlearrayoutputStream.tobytearRay ();
middlearrayoutputstream.close ();
Blob MiddleBlob = hibernate.createblob (middleimagedata, this.departmentmanager.getSession ());
// 오른쪽 절반을 자릅니다
사각형 RightImagerEctangle = 새로운 사각형 (왼쪽 위드 + 중간 위, 0, RightWidth, imageHeight);
readparam.setsourceregion (rightimagerectangle);
bimage = imageReader.read (0, readparam);
bytearrayoutputStream rightArrayOutputStream = 새로운 ByTeArrayOutputStream ();
imageio.write (bimage, 접미사, RightArrayOutputStream);
바이트 [] rightImagedata = rightArrayOutputStream.tobyTeArray ();
RightArrayOutputStream.close ();
Blob rightblob = hibernate.createblob (rightImagedata, this.departmentmanager.getSession ());
// 예비 부품
사각형 retainrectangle = 새로운 사각형 (LeftWidth + MiddleWidth + RightWidth, 0, retainWidth, imageHeight);
readparam.setsourceregion (retainrecepangle);
bimage = imageReader.read (0, readparam);
bytearrayoutputStream retainArrayOutputStream = 새로운 ByTeArrayOutputStream ();
imageio.write (bimage, 접미사, retainArrayoutputStream);
바이트 [] retainImagedata = retainArrayOutputStream.tobyTeArray ();
retainArrayOutputStream.close ();
blob retainblob = hibernate.createblob (retainimagedata, this.departmentmanager.getSession ());
if (! experid.equals ( "") && laperid! = null) {
부서 d = this.departmentmanager.findbyid (long.valueof (leaftid));
if (this.checkedauthids! = null) {
for (int i = 0; i <checkedauthids.size (); i ++) {
메뉴 메뉴 = 새 메뉴 ();
menu.setId (checkedauthids.get (i));
listmenu.add (메뉴);
}
d.setmenus (listmenu);
}
D. GetDepartmentLogo (). SetleftPartimage (LeftBlob);
D. GetDepartmentLogo (). SetMiddlePartImage (MiddleBlob);
d.getDepartmentLogo (). setrightPartimage (RightBlob);
D. getDepartmentLogo (). SetRetainPartimage (retainblob);
d.getDepartmentLogo (). setCreateTime (new date ());
d.getDepartmentLogo (). SetSuffix (접미사);
D.SETNAME (LITERNAME);
D.SetParentID (0L);
d.setNodeType (1);
D. 세트 그레이드 (1);
D.SetCompany (회사);
this.departmentmanager.save (d);
}또 다른{
정수 ParentNodeType = 0;
부서 dd = 새로운 부서 ();
if (this.checkedauthids! = null && this.checkedauthids.size ()! = 0) {
for (int i = 0; i <checkedauthids.size (); i ++) {
메뉴 메뉴 = 새 메뉴 ();
menu.setId (checkedauthids.get (i));
listmenu.add (메뉴);
}
dd.setmenus (listmenu);
}또 다른{
dd.setmenus (null);
}
DepartmentLogo DepartmentLogo = New DepartmentLogo ();
DepartmentLogo.setCreateTime (새 날짜 ());
DepartmentLogo.SetLeftPartimage (LeftBlob);
DepartmentLogo.SetMiddlePartImage (MiddleBlob);
DepartmentLogo.SetrightPartimage (RightBlob);
DepartmentLogo.SetRetainPartimage (retainblob);
DepartmentLogo.SetSuffix (접미사);
dd.setDepartMentLogo (DepartmentLogo);
dd.getDepartmentLogo (). setDepartment (dd);
dd.setid (this.departmentmanager.findmaxid ()+1);
dd.setName (liversname);
dd.setparentID (0L);
dd.setNodeType (1);
DD. 세트 그레이드 (1);
dd.setOrderType (0);
DD. 세트 콤파니 (회사);
dd.setflag (0);
this.departmentmanager.save (dd);
}
}
"Reload"를 반환합니다.
}
다음은 qui를 사용하는 다음과 같이 표시되므로 복사 코드는 다음과 같이 Top.jsp 위의 CSS에 동적으로 표시됩니다. <style type = "text/css">.
.welcome-hide {너비 : 210px; 흰색 공간 : nowrap; 오버플로 : 숨겨진; 텍스트-오버 플로우 : 엘립스 시스;}
#LeftLogo {배경 : url ($ {ctx}/admin/department-logo!showlogo.action?position=left) no-repeat; width : $ {leftwidth} px; 높이 : 80px;}
#middlelogo {배경 : url ($ {ctx}/admin/department-logozeshowlogo.action?position=middle) no-Repeat; width : $ {middlewidth} px; 높이 : 80px;}
#RightLogo,#toptableStyle {배경 : URL ($ {ctx}/adpartmin/department-logo! showlogo.action?position=right) 반복 x; 높이 : 80px;}
#retainLogo {배경 : url ($ {ctx}/admin/department-logo!showlogo.action?position=retain) no-Repeat; width : $ {retainwidth} px; 높이 : 80px;}
</스타일>
Department-Logo! showlogo.action의 showlogo 메소드는 그림을로드하고 코드 코드를 다음과 같이 복사하는 것입니다. public String showlogo () {
httpservletrequest 요청 = servletactionContext.getRequest ();
loginuser loginuser = (loginuser) ((securityContext) request.getSession ().
getAttribute ( "spring_security_context"). getAuthentication (). getPrincipal ();
List <DepartmentLogo> logos = this.logomanager.findall ();
for (DepartmentLogo DepartmentLogo : logos) {
if (loginUser.getUser (). getDepartment (). getId ().
문자열 param = request.getParameter ( "위치");
Blob Blob = null;
if (param! = null) {
노력하다 {
if (param.equals ( "왼쪽")) {
blob = departmentLogo.getLeftPartImage ();
imageLogo = blob.getBinaryStream ();
"Showlogo"를 반환합니다.
} else if (param.equals ( "middle")) {
blob = departmentLogo.getMiddlePartImage ();
imageLogo = blob.getBinaryStream ();
"Showlogo"를 반환합니다.
} else if (param.equals ( "right")) {
blob = departmentLogo.getRightPartImage ();
imageLogo = blob.getBinaryStream ();
"Showlogo"를 반환합니다.
} else if (param.equals ( "retain")) {
blob = departmentLogo.getRetainPartImage ();
imageLogo = blob.getBinaryStream ();
"Showlogo"를 반환합니다.
}
} catch (예외 e) {
e.printstacktrace ();
}
}
}
}
널 리턴;
}
물론 반환 된 주소는 struts2에서 type = "stream"으로 선택해야합니다.
다음과 같이 코드를 복사하십시오. @Results ({
@result (이름 = "showlogo", type = "stream", params = { "contenttype", "image/jpeg,"
+ "이미지/bmp, 이미지/png, 이미지/gif, 이미지/jpeg",
"inputname", "imageLogo", "buffersize", "4096"})))
})
그렇다면 Top.jsp에서 너비를 어떻게 얻습니까?
메뉴를로드 할 때 다음은 메뉴에서 코드 코드를 다음과 같이 복사합니다.
List <DepartmentLogo> logos = this.logomanager.findall ();
for (DepartmentLogo DepartmentLogo : logos) {
if (user.getDepartment (). getId (). Equals (DepartmentLogo.getDepartment (). getId ()) {
request.setAttribute ( "leftWidth", imageIO.Read (DepartmentLogo.
getLeftPartImage (). getBinaryStream ()). getWidth ());
request.setattribute ( "middlewidth", imageio.read (DepartmentLogo.
getMiddlePartImage (). getBinaryStream ()). getWidth ());
request.setattribute ( "retainwidth", imageio.read (DepartmentLogo.
getRetainPartImage (). getBinaryStream ()). getWidth ());
부서지다;
}
}
업로드 디스플레이 기능이 완료됩니다.
이것은 내가 업로드 한 테스트 이미지입니다.
이 기사가 모든 사람의 Java 프로그래밍에 도움이되기를 바랍니다.