有没有办法在不读取整个文件的情况下获取图像的尺寸?
URL url=new URL(<BIG_IMAGE_URL>);
BufferedImage img=ImageIO.read(url);
System.out.println(img.getWidth()+" "+img.getHeight());
img=null;
Run Code Online (Sandbox Code Playgroud) 该JAI设置是相当繁琐,涉及多个罐子和环境变量.如果我可以将它添加为常规的Maven依赖项,它将有助于项目的可移植性.
我正在使用的POM片段是
<dependency>
<groupId>com.sun.media</groupId>
<artifactId>jai_imageio</artifactId>
<version>1.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
而错误是
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Failed to resolve artifact.
Missing:
----------
1) com.sun.media:jai_imageio:jar:1.1
2) javax.media:jai_core:jar:1.1.3
Run Code Online (Sandbox Code Playgroud)
当然,我可以下载并安装这些罐子.问题是双重的:
我还没有找到一种方法让这个与Maven一起工作.
请参阅使用ImageIO读取JCS_YCCK图像,因为我正在使用JAI.
我有一个方法来读取图像,转换它们(大小,格式)并将它们写回.这总是很好用,但现在我遇到了一些显然包含一些元数据(IPTC)的JPEG图像(来自新闻社).转换这些图像时,颜色都是错误的.我的第一个猜测是,那些是CMYK图像,但它们不是.
问题必须来自阅读,因为无论我是将图像转换为较小的JPEG还是PNG,它总是看起来一样.
起初,我曾经ImageIO.read()读过这张照片.我现在得到实际的ImageReadervia ImageIO.getImageReadersByMIMEType()并尝试告诉读者通过设置ignoreMetadata参数ImageReader#setInput(Object input, boolean seekForwardOnly, boolean ignoreMetadata)但忽略元数据但没有成功.
然后我创建了一个没有元数据的图像版本(使用Fireworks).该图像已正确转换.
我能找到的唯一区别是,对于未工作的图像,读者变量的colorSpaceCode值为2,而对于工作图像,值为3.还有一个outColorSpaceCode是2两个图像.
由于读者的源评论仅表示Set by setImageData本机代码回调.一个修改过的IJG + NIFTY颜色空间代码我现在真的被卡住了.所以任何帮助将不胜感激.
您可以通过此处并单击下载来获取原始图像(~3 MB).下图左侧显示了我从原始图像中获得的内容,右侧显示了它应该是什么样子.

为什么下面的代码返回高度:-1表示高度尚未知晓.如何获得图像的高度?
try {
// Create a URL for the image's location
URL url = new URL("http://bmw-2006.auto-one.co.uk/wp-content/uploads/bmw-m3-2006-3.jpg");
// Get the image
java.awt.Image image = Toolkit.getDefaultToolkit().createImage(url);
System.out.println("Height: " + image.getHeight(null));
} catch (MalformedURLException e) {
} catch (IOException e) {
}
Run Code Online (Sandbox Code Playgroud) 根据Google Page Speed建议,我想将图片尺寸指定为"优化浏览器渲染".
通过消除不必要的回流和重新绘制的需要,为所有图像指定宽度和高度允许更快的渲染.
我正在研究在静态内容项目中遍历图像文件(PNG,JPEG)的方法,并输出一个文件,其中包含每个图像文件的路径和文件名以及像素的高度和宽度.然后我会使用它来帮助我构建标记,方法是使用src属性数据来查找用于height和width属性的值.
\images\logo.png,100,25
Run Code Online (Sandbox Code Playgroud)
我的第一个想法是寻找ANT任务,因为我们的静态内容构建使用Ant用于其他目的(比如在JavaScript和CSS文件上使用YUI Compressor).我也对其他想法持开放态度,包括解决这个问题的其他方法.我宁愿不必手动完成这项工作.
我意识到,在我们的数据库中,某些人的图像文件是定向的,而所有图像文件都应该是纵向的。因此,我需要确定哪个文件的宽度大于其高度。
我想知道是否有任何方法可以获取类型列的height和width, BLOB例如dbms_lob.getlength函数,该函数返回CLOB/ BLOB列中的字符数(字节)。