无涯教程-Java9 - 多分辨率Image API

44 阅读2分钟

在Java 9中,引入了新的多分辨率图像API,该API支持具有不同分辨率变量的多个图像。以下是多分辨率图像的主要操作。

  • Image getResolutionVariant(double destImageWidth,double destImageHeight) - 获取特定图像,该图像是在指定尺寸下代表此图像的最佳变体。

  • List<Image> getResolutionVariants()   - 获取所有分辨率变量的可读列表。

import java.io.IOException;
import java.net.URL;
import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.List;
import java.awt.Image;
import java.awt.image.MultiResolutionImage;
import java.awt.image.BaseMultiResolutionImage;

import javax.imageio.ImageIO;

public class Tester { public static void main(String[] args) throws IOException, MalformedURLException {

  </span><span class="typ">List</span><span class="pun">&lt;</span><span class="typ">String</span><span class="pun">&gt;</span><span class="pln"> imgUrls</span><span class="pun">=</span><span class="typ">List</span><span class="pun">.</span><span class="kwd">of</span><span class="pun">(</span><span class="str">"http://www.learnfk.com/java9/images/logo.png"</span><span class="pun">,</span><span class="pln">
     </span><span class="str">"http://www.learnfk.com/java9/images/mini_logo.png"</span><span class="pun">,</span><span class="pln">
     </span><span class="str">"http://www.learnfk.com/java9/images/large_logo.png"</span><span class="pun">);</span><span class="pln">

  </span><span class="typ">List</span><span class="pun">&lt;</span><span class="typ">Image</span><span class="pun">&gt;</span><span class="pln"> images</span><span class="pun">=</span><span class="kwd">new</span><span class="pln"> </span><span class="typ">ArrayList</span><span class="pun">&lt;</span><span class="typ">Image</span><span class="pun">&gt;();</span><span class="pln">

  </span><span class="kwd">for</span><span class="pln"> </span><span class="pun">(</span><span class="typ">String</span><span class="pln"> url </span><span class="pun">:</span><span class="pln"> imgUrls</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
     images</span><span class="pun">.</span><span class="kwd">add</span><span class="pun">(</span><span class="typ">ImageIO</span><span class="pun">.</span><span class="pln">read</span><span class="pun">(</span><span class="kwd">new</span><span class="pln"> URL</span><span class="pun">(</span><span class="pln">url</span><span class="pun">)));</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

  </span><span class="com">//将所有图像读入一个多分辨率图像</span><span class="pln">
  </span><span class="typ">MultiResolutionImage</span><span class="pln"> multiResolutionImage</span><span class="pun">=</span><span class="pln">
     </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">BaseMultiResolutionImage</span><span class="pun">(</span><span class="pln">images</span><span class="pun">.</span><span class="pln">toArray</span><span class="pun">(</span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Image</span><span class="pun">[</span><span class="lit">0</span><span class="pun">]));</span><span class="pln">

  </span><span class="com">//获取所有图像的变体</span><span class="pln">
  </span><span class="typ">List</span><span class="pun">&lt;</span><span class="typ">Image</span><span class="pun">&gt;</span><span class="pln"> variants</span><span class="pun">=</span><span class="pln">multiResolutionImage</span><span class="pun">.</span><span class="pln">getResolutionVariants</span><span class="pun">();</span><span class="pln">

  </span><span class="typ">System</span><span class="pun">.</span><span class="kwd">out</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="str">"Total number of images: "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> variants</span><span class="pun">.</span><span class="pln">size</span><span class="pun">());</span><span class="pln">

  </span><span class="kwd">for</span><span class="pln"> </span><span class="pun">(</span><span class="typ">Image</span><span class="pln"> img </span><span class="pun">:</span><span class="pln"> variants</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
     </span><span class="typ">System</span><span class="pun">.</span><span class="kwd">out</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="pln">img</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

  </span><span class="com">//获取每个指示大小的分辨率特定图像变体</span><span class="pln">
  </span><span class="typ">Image</span><span class="pln"> variant1</span><span class="pun">=</span><span class="pln">multiResolutionImage</span><span class="pun">.</span><span class="pln">getResolutionVariant</span><span class="pun">(</span><span class="lit">156</span><span class="pun">,</span><span class="pln"> </span><span class="lit">45</span><span class="pun">);</span><span class="pln">
  </span><span class="typ">System</span><span class="pun">.</span><span class="kwd">out</span><span class="pun">.</span><span class="pln">printf</span><span class="pun">(</span><span class="str">"\nImage for destination[%d,%d]: [%d,%d]"</span><span class="pun">,</span><span class="pln"> 
     </span><span class="lit">156</span><span class="pun">,</span><span class="pln"> </span><span class="lit">45</span><span class="pun">,</span><span class="pln"> variant1</span><span class="pun">.</span><span class="pln">getWidth</span><span class="pun">(</span><span class="kwd">null</span><span class="pun">),</span><span class="pln"> variant1</span><span class="pun">.</span><span class="pln">getHeight</span><span class="pun">(</span><span class="kwd">null</span><span class="pun">));</span><span class="pln">

  </span><span class="typ">Image</span><span class="pln"> variant2</span><span class="pun">=</span><span class="pln">multiResolutionImage</span><span class="pun">.</span><span class="pln">getResolutionVariant</span><span class="pun">(</span><span class="lit">311</span><span class="pun">,</span><span class="pln"> </span><span class="lit">89</span><span class="pun">);</span><span class="pln">
  </span><span class="typ">System</span><span class="pun">.</span><span class="kwd">out</span><span class="pun">.</span><span class="pln">printf</span><span class="pun">(</span><span class="str">"\nImage for destination[%d,%d]: [%d,%d]"</span><span class="pun">,</span><span class="pln"> </span><span class="lit">311</span><span class="pun">,</span><span class="pln"> </span><span class="lit">89</span><span class="pun">,</span><span class="pln"> 
     variant2</span><span class="pun">.</span><span class="pln">getWidth</span><span class="pun">(</span><span class="kwd">null</span><span class="pun">),</span><span class="pln"> variant2</span><span class="pun">.</span><span class="pln">getHeight</span><span class="pun">(</span><span class="kwd">null</span><span class="pun">));</span><span class="pln">

  </span><span class="typ">Image</span><span class="pln"> variant3</span><span class="pun">=</span><span class="pln">multiResolutionImage</span><span class="pun">.</span><span class="pln">getResolutionVariant</span><span class="pun">(</span><span class="lit">622</span><span class="pun">,</span><span class="pln"> </span><span class="lit">178</span><span class="pun">);</span><span class="pln">
  </span><span class="typ">System</span><span class="pun">.</span><span class="kwd">out</span><span class="pun">.</span><span class="pln">printf</span><span class="pun">(</span><span class="str">"\nImage for destination[%d,%d]: [%d,%d]"</span><span class="pun">,</span><span class="pln"> </span><span class="lit">622</span><span class="pun">,</span><span class="pln"> </span><span class="lit">178</span><span class="pun">,</span><span class="pln"> 
     variant3</span><span class="pun">.</span><span class="pln">getWidth</span><span class="pun">(</span><span class="kwd">null</span><span class="pun">),</span><span class="pln"> variant3</span><span class="pun">.</span><span class="pln">getHeight</span><span class="pun">(</span><span class="kwd">null</span><span class="pun">));</span><span class="pln">

  </span><span class="typ">Image</span><span class="pln"> variant4</span><span class="pun">=</span><span class="pln">multiResolutionImage</span><span class="pun">.</span><span class="pln">getResolutionVariant</span><span class="pun">(</span><span class="lit">300</span><span class="pun">,</span><span class="pln"> </span><span class="lit">300</span><span class="pun">);</span><span class="pln">
  </span><span class="typ">System</span><span class="pun">.</span><span class="kwd">out</span><span class="pun">.</span><span class="pln">printf</span><span class="pun">(</span><span class="str">"\nImage for destination[%d,%d]: [%d,%d]"</span><span class="pun">,</span><span class="pln"> </span><span class="lit">300</span><span class="pun">,</span><span class="pln"> </span><span class="lit">300</span><span class="pun">,</span><span class="pln"> 
     variant4</span><span class="pun">.</span><span class="pln">getWidth</span><span class="pun">(</span><span class="kwd">null</span><span class="pun">),</span><span class="pln"> variant4</span><span class="pun">.</span><span class="pln">getHeight</span><span class="pun">(</span><span class="kwd">null</span><span class="pun">));</span><span class="pln">

}
}

运行上面代码输出

Total number of images: 3
BufferedImage@7ce6a65d: type=6 ColorModel: #pixelBits=32 numComponents=4 
color space =java.awt.color.ICC_ColorSpace@548ad73b transparency=3 
has alpha=true isAlphaPre=false ByteInterleavedRaster: width =311 
height=89 #numDataElements 4 dataOff[0]=3

BufferedImage@4c762604: type=6 ColorModel: #pixelBits=32 numComponents=4 color space =java.awt.color.ICC_ColorSpace@548ad73b transparency=3 has alpha=true isAlphaPre=false ByteInterleavedRaster: width =156 height=45 #numDataElements 4 dataOff[0]=3

BufferedImage@2641e737: type=6 ColorModel: #pixelBits=32 numComponents=4 color space =java.awt.color.ICC_ColorSpace@548ad73b transparency=3 has alpha=true isAlphaPre=false ByteInterleavedRaster: width =622 height=178 #numDataElements 4 dataOff[0]=3

Image for destination[156,45]: [311,89] Image for destination[311,89]: [311,89] Image for destination[622,178]: [622,178] Image for destination[300,300]: [622,178]

参考链接

www.learnfk.com/java/java9-…