缩放后图像处于横向而不是纵向模式
Image is in landscape instead of portrait mode after scaling
我有一张图片,想使用 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);
文件的元数据看起来正确(方向 = 1)。
我的解释是人像图片缩小后缩放后还是人像。
我也试过一些其他的libraries/classes像这样: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
所以问题不在于 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"));
这似乎解决了 "this" 问题。
您可以查看ImageIO.read( ) always rotates my uploaded picture了解更多详情
浏览器的实现方式<img>
不同。
Firefox 不会读取 EXIF 信息,因此纵向图片会横向显示。
Chrome 确实读出了 EXIF 信息,因此肖像保持肖像。
我用这个 CSS 声明修复了它:
image-orientation: from-image;
我有一张图片,想使用 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);
文件的元数据看起来正确(方向 = 1)。
我的解释是人像图片缩小后缩放后还是人像。
我也试过一些其他的libraries/classes像这样: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
所以问题不在于 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"));
这似乎解决了 "this" 问题。
您可以查看ImageIO.read( ) always rotates my uploaded picture了解更多详情
浏览器的实现方式<img>
不同。
Firefox 不会读取 EXIF 信息,因此纵向图片会横向显示。
Chrome 确实读出了 EXIF 信息,因此肖像保持肖像。
我用这个 CSS 声明修复了它:
image-orientation: from-image;