JSP, Как масштабировать изображение?

Там должен так или иначе масштабироваться, изображение затем отображаются на jsp странице? Когда получают и отображают изображения, я хочу показать все фотографии в том же размере. есть ли какой-либо API, может сделать это? Я искал от Google, те, которых я нашел, был о масштабировании изображений byusing tookit, но не могут работы в веб-приложении.

5
задан BalusC 30 May 2010 в 13:15
поделиться

2 ответа

Для этого можно использовать встроенный Java 2D API (базовое руководство Sun здесь ).

По сути, вам нужно создать сервлет , который получает InputStream исходного изображения в методе doGet () , передает его через Java 2D. API, а затем записывает его в OutputStream ответа HTTP. Затем вы просто сопоставляете этот сервлет с определенным URL-шаблоном в web.xml , например / thumbs / * и вызовите этот сервлет в атрибуте src элемента HTML .

Вот базовый пример запуска (вам все равно нужно самостоятельно обрабатывать непредвиденные ситуации, как вы хотите):

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, так как эта технология просмотра не подходит для этой задачи.


Примечание 2: это довольно дорогостоящая задача (интенсивно использующая процессор), имейте это в виду. Возможно, вы захотите заранее кэшировать или предварительно сгенерировать превью.

4
ответ дан 15 December 2019 в 00:52
поделиться

Примечание: нет, это невозможно сделать с помощью JSP. в одиночку, так как это технология просмотра непригоден для этой задачи.

Технически вы можете это сделать, но на самом деле это не рекомендуется.

И да, я бы кэшировал изображения на долгое время вместе с чем-то, чтобы идентифицировать изменения в оригинале, а затем воссоздавать измененное изображение только в том случае, если исходное изменение (или срок действия кеша истекает, может быть, через неделю после того, как изображение было последний доступ).

0
ответ дан 15 December 2019 в 00:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: