从我目前看到的教程和信息来看,Imagero 只能从目录中读取图像。任何人之前都使用过 Imagero lib,并且知道它是否可以直接从 url 读取图像?
另外,我正在尝试执行图像处理,例如使 jsp 页面中的图像变暗/变亮。imagero 可以为我实现这一目标吗?
我被困住了,需要一些建议。
Imagero:http: //reader.imagero.com/
从我目前看到的教程和信息来看,Imagero 只能从目录中读取图像。任何人之前都使用过 Imagero lib,并且知道它是否可以直接从 url 读取图像?
另外,我正在尝试执行图像处理,例如使 jsp 页面中的图像变暗/变亮。imagero 可以为我实现这一目标吗?
我被困住了,需要一些建议。
Imagero:http: //reader.imagero.com/
正如 Josh M 所说,在 Java 中从 URL 读取图像的最简单方法可能是使用ImageIO.read(url)
.
但是,使图像变暗或变亮的“Java 方式”(a BufferedImage
)是使用RescaleOp
. 这是 Chet Haase 和 Romain Guy 的优秀教程。
RescaleOp
经过高度优化,并且在大多数平台上使用本机代码,因此它肯定比在 Java 中循环遍历每个像素要快。
您不需要外部库来从 URL 下载图像;只需将其视为您正在下载任何其他文件。幸运的是,ImageIO 类提供了一个名为的方法read(URL)
,可以在此处找到该方法专门用于下载图像。
至于修改BufferedImage
,我建议循环遍历宽度和高度(表示 x 和 y)并获取行、列中每个像素的 RGB,BufferedImage#getRGB(int, int)
并使用修改颜色并在该位置设置颜色BufferedImage#setRGB(int, int, int)
。
我可以想到两种不同的方法来使图像变暗:一种方法是循环遍历每个 x,y 并使每种颜色变暗,另一种方法是在图像上绘制一个半透明的屏幕,这两种方法都将在下面显示:
public void darken(final BufferedImage image){
for(int x = 0; x < image.getWidth(); x++)
for(int y = 0; y < image.getHeight(); y++)
image.setRGB(x, y, new Color(image.getRGB(x, y)).darker().getRGB());
}
public void darken(final BufferedImage image, final int intensity){
assert intensity >= 0 && intensity <= 255;
final Graphics g = image.getGraphics();
g.setColor(new Color(0, 0, 0, intensity));
g.fillRect(0, 0, image.getWidth(), image.getHeight());
g.dispose();
}
注意第二种方法:强度越高=图像越暗。