Estoy tratando de hacer el siguiente código:
private void crop(HttpServletRequest request, HttpServletResponse response){
int x = 100;
int y = 100;
int w = 3264;
int h = 2448;
String path = "D:images\upload_final\030311175258.jpg";
BufferedImage image = ImageIO.read(new File(path));
BufferedImage out = image.getSubimage(x, y, w, h);
ImageIO.write(out, "jpg", new File(path));
}
Pero me sigue dando el mismo error:
java.awt.image.RasterFormatException: (x + width) is outside of Raster
sun.awt.image.ByteInterleavedRaster.createWritableChild(ByteInterleavedRaster.java:1230)
java.awt.image.BufferedImage.getSubimage(BufferedImage.java:1156)
Donde está mi error ?
Mi primera conjetura es que su
(x + w) > image.getWidth()
.Si la impresión de la imagen.getWidth(), es 3264? :O
Lo que estás haciendo ahora es este:
Si usted está tratando de recortar la esquina superior de orig, y acaba de obtener el «solapamiento» entonces usted necesita para hacer
Si usted está tratando de hacer esto:
Entonces usted necesita para hacer esto:
Para aquellos que sólo quieren recortar y otros básicas de manipulación de la imagen de las características de su software recomiendo el uso de una biblioteca de procesamiento de imagen. Generalmente las implementaciones optimizadas y estable.
Algunos de Java de procesamiento de imagen de las bibliotecas: ImageJ, Marvin, JMagick, JIU, JH Laboratorios, imgscalr.
Otra ventaja es mantener las cosas simples en su lado. Usted puede hacer un montón de cosas con sólo unas pocas líneas de código. En el siguiente ejemplo, he utilizado Marvin Marco para el cultivo.
Original:

Recortada:

Fuente: