Este artículo describe el método de cargar imágenes para el corte por Java. Compártelo para su referencia. El análisis específico es el siguiente:
¿Por qué quiero cortar las imágenes cargadas? El resto de las partes, porque los cambios izquierdo y mediano pueden tener patrones o caracteres, por lo que no se pueden estirar solo la parte correcta, y la parte restante puede adaptarse. Así que usé el ImageReader de Javax para operar. Finalmente, guarde la base de datos como tipo blob.
Primero, escriba enctype = "multipart/formy-data" en el formulario
Copie el código del código de la siguiente manera: <form de método = "post" id = "mainform" action = "$ {ctx} /admin/department!save.action" enctype = "multipart/form-data">
El siguiente es el siguiente código para cargar el código de copia del componente en el formulario: <tr>
<TD>
<strong> logotipo de carga: </strong>
<input type = "Hidden" name = "suffix" id = "suffix" valor = "$ {depart.departmentlogo.suffix}"/>
</td>
<TD>
<input type = "file" name = "logoFile" id = "logoFile" onChange = "checkFile ();"/>
</td>
</tr>
<tr>
<TD> </td>
<TD>
<span> (formato de imagen: jpg, jpeg, bmp, gif, png; </span> <br/>
<span> Tamaño recomendado: 1120 × 80 píxeles) </span>
</td>
</tr>
El método checkFile () de verificación de imágenes se usa para verificar si la imagen termina en un formato especificado y si no hay código de copia seleccionado de la siguiente manera: función checkFile () {
Val Value = $ ("#logoFile"). Val ();
if (! valor) {
alerta ("¡Seleccione la imagen que desea cargar!");
devolver falso;
}demás{
if (value.lastindexof (". jpg")! = -1) {
$ ("#sufix"). Val ("JPG");
devolver verdadero;
} else if (value.lastindexof (". jpeg")! = -1) {
$ ("#sufix"). Val ("JPEG");
devolver verdadero;
} else if (value.lastindexof (". gif")! = -1) {
$ ("#sufix"). Val ("GIF");
devolver verdadero;
} else if (value.lastindexof (". Bmp")! = -1) {
$ ("#sufijo"). Val ("BMP");
devolver verdadero;
} else if (value.lastindexof (". png")! = -1) {
$ ("#sufijo"). Val ("PNG");
devolver verdadero;
}demás{
alerta ("Lo siento, el formato de archivo que cargó es incorrecto, seleccione el archivo de imagen en el formato especificado para cargar");
devolver falso;
}
}
}
La siguiente es la operación de guardado de fondo.
Copie el código de la siguiente manera: public string save () lanza la excepción {
HttpservletRequest request = servletactionContext.getRequest ();
String departid = request.getParameter ("id");
String departName = request.getParameter ("nombre");
String CompanyId = request.getParameter ("CompanyId");
// sufijo de imagen
String sufix = request.getParameter ("sufijo");
List <Sen> listMenu = new ArrayList <Menu> ();
Company Company = New Company ();
Company.SetId (long.ValueOf (CompanyId));
if (this.logofile! = null && departname! = null && companyid! = null && suffix! = null) {
// Obtener el Imageader para analizar la imagen
Iterator <IricaSeader> ImageReaders = ImageIO.GetImageReadersByFormatName (sufijo);
Imagereader ImageReader = ImageReaders.next ();
// pasar la imagen en forma de transmisión de byte
InputStream logoStream = new BufferedInputStream (nuevo FileInputStream (this.logofile));
// Convertir a la transmisión de entrada de imágenes
ImageInputStream ImageInputStream = ImageIO.CreateEmageInputStream (Logostream);
ImageReader.setInput (ImageInputStream, true);
int ImageWidth = ImageReader.getWidth (0);
// Altura fija 80
int ImageHeight = 80;
// Establezca el ancho izquierdo, central, derecho y restante
int LeftWidth = ImageWidth / 2;
int MiddleWidth = (ImageWidth - LeftWidth) / 3;
int Rightwidth = 5;
int retrainWidth = ImageWidth - LeftWidth -MiddleWidth - 5;
ImagereadParam readParam = imageader.getDefaultreadParam ();
Bufferedimage bimage = nulo;
// recortar la mitad izquierda
// Obtener rectángulo basado en el ancho y la altura
Rectángulo leftIMagerectangle = nuevo rectángulo (0, 0, ancho izquierdo, imageHeight);
readparam.setSourCeregion (LeftImagerExtangle);
bimage = imageReader.read (0, readparam);
// flujo de salida de la matriz de bytes
ByteArRayOutputStream LeftByTearRayOutputStream = new ByteArRayOutputStream ();
Imageio.write (bimage, sufijo, leftByTearRayOutputStream);
// Obtener una matriz de bytes
byte [] leftImagedata = LeftByTearRauteutputStream.tobyTearray ();
LeftByTearRayOutputStream.close ();
// hibernate crea un tipo de blob
Blob LeftBlob = Hibernate.CreateBlob (LeftImagedata, this.departmentManager.getSession ());
// recortar la parte media
Rectángulo middleImagerEptangle = nuevo rectángulo (ancho izquierdo, 0, ancho medio, imageHeight);
readparam.setSourCeregion (middleImagerExtangle);
bimage = imageReader.read (0, readparam);
ByteArRayOutputStream middlearRauteutputStream = new ByteArRaRyOutputStream ();
Imageio.write (bimage, sufijo, middlearRayOutputStream);
byte [] middleImagedata = middlearRauteutputStream.tobyTearray ();
MiddlearRauteutputStream.close ();
Blob middleblob = hibernate.createBlob (middleImagedata, this.departmentManager.getSession ());
// recorte la mitad derecha
Rectangle RightImagerEptangle = nuevo rectángulo (anchura izquierda + ancho medio, 0, ancho de la derecha, imageHeight);
readparam.setSourCeregion (RightImagerEptangle);
bimage = imageReader.read (0, readparam);
ByteArRayOutputStream RightArraYOutputStream = new ByteArRaReOutputStream ();
ImageIO.Write (Bimage, sufijo, RightArraYoutputStream);
byte [] recthimagedata = rightArraYOutputStream.tobytearray ();
RightArraYoutputStream.close ();
Blob rightblob = hibernate.createBlOB (RightImagedata, this.departmentManager.getSession ());
// Parte de reserva
Rectangle RetrainRectangle = nuevo rectángulo (anchura izquierda + ancho medio + ancho de derecha, 0, retenwidth, imageHeight);
readParam.setSourCeregion (retenerRectangle);
bimage = imageReader.read (0, readparam);
ByteArRayOutputStream RetRainArraYOutputStream = new ByteArRayOutputStream ();
ImageIO.Write (Bimage, sufijo, retenerRayoutputStream);
byte [] reteneriMagedata = retrainArraYoutputStream.tobyTearray ();
retrainArraYoutputStream.close ();
Blob retenBlob = hibernate.createBlOB (reteniMageData, this.departmentManager.getSession ());
if (! departid.equals ("") && departid! = null) {
Departamento d = this.departmentManager.findbyid (long.ValueOf (departid));
if (this.eckedAuthids! = null) {
para (int i = 0; i <checkEdAuthids.size (); i ++) {
Menú menú = nuevo menú ();
menú.SetId (checkEdAuthids.get (i));
listmenu.add (menú);
}
d.setmenus (listmenu);
}
d.getDePartmentLogo (). SetLeftPartimage (LeftBlob);
d.getDePartmentLogo (). setMiddlePartimage (middleBlob);
d.getDePartmentLogo (). setRightParTimage (RightBlob);
d.getDePartmentLogo (). setTretainPartimage (retenerBlOB);
d.getDePartmentLogo (). setCreateTime (nueva fecha ());
d.getDePartmentLogo (). setSuffix (sufijo);
d.setName (departName);
d.SetParentId (0l);
d.setNodeType (1);
d.SetGrade (1);
D.SetCompany (Compañía);
this.departmentManager.save (d);
}demás{
Entero parentNodeType = 0;
Departamento dd = nuevo departamento ();
if (this.eckedAuthids! = null && this.checkedAuthids.size ()! = 0) {
para (int i = 0; i <checkEdAuthids.size (); i ++) {
Menú menú = nuevo menú ();
menú.SetId (checkEdAuthids.get (i));
listmenu.add (menú);
}
dd.setmenus (listmenu);
}demás{
dd.setmenus (nulo);
}
Departamento de departamento de departamento = new DepartmentLogo ();
departamlogo.setCreateTime (nueva fecha ());
departamlogo.setleftPartimage (LeftBlob);
departamlogo.setMiddlePartimage (MiddleBlob);
departamlogo.setRightPartimage (RightBlob);
departamlogo.setTretainPartimage (retenerblob);
departmentlogo.setsuffix (sufijo);
dd.setDepartmentLogo (DepartmentLogo);
dd.getDepartmentLogo (). SetDepartment (DD);
dd.setid (this.departmentManager.findmaxid ()+1);
dd.setName (departName);
dd.setParentId (0l);
dd.setNodeType (1);
dd.setGrade (1);
dd.setOrderType (0);
DD.SetCompany (Compañía);
dd.setFlag (0);
this.departmentManager.save (DD);
}
}
regresar "recargar";
}
Se muestra lo siguiente.
.Welcome-Hide {ancho: 210px; White-Space: Nowrap; Overflow: Hidden; Text-Overflow: Ellipsis;}
#leftlogo {fondo: url ($ {ctx} /admin/department-logo!Showlogo.Action?Position=left) No-Repeat; Width: $ {LeftWidth} Px; Height: 80px;}
#middlelogo {en segundo plano: url ($ {ctx} /admin/department-logo!Showlogo.Action?Position=middle) No-Repeat; Width: $ {MiddleWidth} px; altura: 80px;};}
#RightLogo,#toptableStyle {background: url ($ {ctx} /admin/department-logo_showlogo.action?position=right) repetir-x; altura: 80px;}
#etainlogo {en segundo plano: url ($ {ctx} /admin/department-logo!Showlogo.Action?position=etrain) No-Repeat; Width: $ {retenwidth} px; altura: 80px;}
</style>
El método showlogo en departamento-logo! Showlogo.action es cargar la imagen y copiar el código del código de la siguiente manera: public String showlogo () {
HttpservletRequest request = servletactionContext.getRequest ();
LoginUser LoginUser = (LoginUser) ((SecurityContext) request.getSession ().
getAttribute ("Spring_Security_Context")).
Lista <Scart de departamento> logotos = this.logomanager.findall ();
para (Departamento de Departamento de Departamento de: Logos) {
if (loginuser.getUser (). getDepartment (). getId (). Equals (departmentLogo.getDepartment (). getId ())) {
Cadena param = request.getParameter ("Position");
Blob blob = nulo;
if (param! = null) {
intentar {
if (param.equals ("izquierda")) {
blob = departamlogo.getleftPartimage ();
imageLogo = blob.getBinaryStream ();
regresar "showlogo";
} else if (param.equals ("medio")) {
blob = departamlogo.getMiddlePartimage ();
imageLogo = blob.getBinaryStream ();
regresar "showlogo";
} else if (param.equals ("right")) {
blob = departmentLogo.getRightPartimage ();
imageLogo = blob.getBinaryStream ();
regresar "showlogo";
} else if (param.equals ("retener")) {
blob = departmentLogo.getTreAinPartimage ();
imageLogo = blob.getBinaryStream ();
regresar "showlogo";
}
} Catch (Exception e) {
E.PrintStackTrace ();
}
}
}
}
regresar nulo;
}
Por supuesto, la dirección devuelta debe seleccionarse como tipo = "flujo" en Struts2
Copie el código de la siguiente manera: @Results ({
@Result (name = "showlogo", type = "stream", params = {"contentType", "Image/jpeg",
+ "Imagen/BMP, Image/Png, Image/Gif, Image/JPeg",
"InputName", "ImageLogo", "BufferSize", "4096"})
})
Entonces, ¿cómo se obtiene el ancho en top.jsp?
Lo obtuve al cargar el menú.
Lista <Scart de departamento> logotos = this.logomanager.findall ();
para (Departamento de Departamento de Departamento de: Logos) {
if (user.getDepartment (). getId (). Equals (departamlogo.getdepartment (). getId ())) {
request.setAttribute ("Leftwidth", imageIO.Read (Departamento de Departamento.
getLeftPartimage (). GetBinaryStream ()). GetWidth ());
request.setAttribute ("MiddleWidth", ImageIO.Read (DepartmentLogo.
getMiddlePartimage (). GetBinaryStream ()). GetWidth ());
request.setAttribute ("retenerwidth", imageio.read (departmentLogo.
getTeaTainPartimage (). GetBinaryStream ()). GetWidth ());
romper;
}
}
Esto completa una función de visualización de carga.
Esta es la imagen de prueba que cargué.
Espero que este artículo sea útil para la programación Java de todos.