我有一张图片,想要使用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
答案 0 :(得分:2)
所以问题不在于ImgScar
,但是ImageIO
,ImageIO
无法读取图片的方向,所以它被读入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;