5

とにかく画像を拡大縮小してjspページに表示することはありますか? 画像を取得して表示するときに、すべての写真を同じサイズで表示したい。それを行うことができるAPIはありますか?Google で検索したところ、takeit を使用して画像をスケーリングする方法が見つかりましたが、Web アプリケーションでは機能しません。

4

2 に答える 2

4

これには、組み込みのJava 2D APIを使用できます (基本的な Sun チュートリアルはこちら)。

基本的に、メソッドで元の画像のを取得し、それを Java 2D API を介して渡し、HTTP 応答の に書き込むサーブレットを作成する必要があります。次に、このサーブレットを特定のinにマップするだけです。たとえば、HTML要素の属性でこのサーブレットを呼び出します。InputStreamdoGet()OutputStreamurl-patternweb.xml/thumbs/*src<img>

基本的なキックオフの例を次に示します (予期しない状況を自分で処理する必要があります)。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // First get image file name as request pathinfo (or parameter, whatever you want).
    String imageFilename = request.getPathInfo().substring(1);

    // And get the thumbnail dimensions as request parameters as well.
    int thumbWidth = Integer.parseInt(request.getParameter("w"));
    int thumbHeight = Integer.parseInt(request.getParameter("h"));

    // Then get an InputStream of image from for example local disk file system.
    InputStream imageInput = new FileInputStream(new File("/images", imageFilename));

    // Now scale the image using Java 2D API to the desired thumb size.
    Image image = ImageIO.read(imageInput);
    BufferedImage thumb = new BufferedImage(thumbWidth, thumbHeight, BufferedImage.TYPE_INT_RGB);
    Graphics2D graphics2D = thumb.createGraphics();
    graphics2D.setBackground(Color.WHITE);
    graphics2D.setPaint(Color.WHITE); 
    graphics2D.fillRect(0, 0, thumbWidth, thumbHeight);
    graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
    graphics2D.drawImage(image, 0, 0, thumbWidth, thumbHeight, null);

    // Write the image as JPG to the response along with correct content type.
    response.setContentType("image/jpeg");
    ImageIO.write(thumb, "JPG", response.getOutputStream());
}

web.xml次のようにマップされたサーブレットを使用します。

<servlet>
    <servlet-name>thumbServlet</servlet-name>
    <servlet-class>com.example.ThumbServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>thumbServlet</servlet-name>
    <url-pattern>/thumbs/*</url-pattern>        
</servlet-mapping>

これは次のように使用できます。

<img src="thumbs/filename.jpg?w=100&h=100" width="100" height="100">

注: いいえ、JSP はこのタスクには適していないビュー テクノロジであるため、JSP だけでは実行できません。


注 2: これは非常にコストのかかる (CPU を集中的に使用する) タスクです。これを念頭に置いてください。事前に親指をキャッシュまたは事前生成することを検討することをお勧めします。

于 2010-05-30T13:12:53.270 に答える
0

注: いいえ、JSP はこのタスクには適していないビュー テクノロジであるため、JSP だけでは実行できません。

技術的には可能ですが、実際にはお勧めできません。

そして、はい、元の変更を識別するための何かと一緒に、画像を長期間キャッシュし、元の変更があった場合にのみサイズ変更された画像を再作成します (または、画像が最後にアクセスされてから 1 週間後にキャッシュの有効期限が切れます)。 .

于 2010-05-31T12:40:53.050 に答える