簡體   English   中英

縮放后圖像處於橫向而不是縱向模式

[英]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)。
我的解釋是在縮小人像圖片時,縮放過程后它仍然是人像圖片。

我還嘗試了其他一些類似這樣的庫/類: 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

所以問題不ImgScarImgScar ImageIOImageIO不會讀取圖像的方向,所以它被讀取為 3264x1836 - Landscape。

所以我最終做的是將圖像旋轉 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"));

這似乎已經解決了“這個”問題。

你可以看看ImageIO.read() 總是旋轉我上傳的圖片了解更多細節

瀏覽器以不同的方式實現<img>
Firefox 不會讀取 EXIF 信息,因此縱向圖片以橫向顯示。
Chrome 確實會讀出 EXIF 信息,因此肖像保持縱向。

我用這個 CSS 聲明修復了它:
image-orientation: from-image;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM