缩放后,图像处于横向而非纵向模式

时间:2015-05-30 08:35:19

标签: java imgscalr

我有一张图片,想要使用imgscalr [1]缩小图像 源图像的大小为1836 x 3264(因此它是纵向模式),目标分辨率为1336 x 768.
失败的是图像在缩放后不再处于横向模式而不是纵向模式。缩放本身就像一个魅力 我的代码:

BufferedImage src = ImageIO.read(new File("sourceimage.jpg"));
BufferedImage scaled = Scalr.resize(src, Scalr.Method.SPEED, Scalr.Mode.FIT_TO_HEIGHT, 1336, 768, Scalr.OP_ANTIALIAS);
ImageIO.write(scaled, "jpg", f);

文件的元数据看起来正确(orientation = 1)。
我的演示是在缩放处理后缩小肖像画面时它仍然是肖像画面。

我还尝试了一些其他的库/类:https://frickelblog.wordpress.com/2009/06/08/fast-image-scaling-in-java/但效果是一样的。

你能帮帮我吗?这个让我抓狂!我很确定只有一个细节可以改变。

[1] http://www.thebuzzmedia.com/software/imgscalr-java-image-scaling-library/#maven

修改
这是原始图片:http://i.stack.imgur.com/NEc8j.jpg
缩放版本:http://i.stack.imgur.com/SYx6p.jpg

2 个答案:

答案 0 :(得分:2)

所以问题不在于ImgScar,但是ImageIOImageIO无法读取图片的方向,所以它被读入3264x1836 - 风景。

所以我最终做的是将图像旋转90度......

        BufferedImage src = ImageIO.read(new File("/Users/swhitehead/Downloads/original.jpg"));

        System.out.println(src.getWidth() + "x" + src.getHeight());
        BufferedImage rotated = Scalr.rotate(src, Scalr.Rotation.CW_90, Scalr.OP_ANTIALIAS);
        BufferedImage scaled = Scalr.resize(rotated, Scalr.Method.SPEED, Scalr.Mode.FIT_TO_HEIGHT, 1336, 768, Scalr.OP_ANTIALIAS);
        System.out.println(scaled.getWidth() + "x" + scaled.getHeight());
        ImageIO.write(scaled, "jpg", new File("Scaled.jpg"));

这似乎已经修复了#34;这个"问题

您可以查看ImageIO.read( ) always rotates my uploaded picture了解更多详情

答案 1 :(得分:1)

浏览器以不同的方式实现<img>
Firefox不会读取EXIF信息,因此肖像以横向显示。
Chrome确实会读出EXIF信息,因此肖像保持纵向。

我通过以下CSS声明对其进行了修复:
image-orientation: from-image;