JSP 如何缩放图像?

2023-12-06

有没有办法缩放图像然后在jsp页面中显示?当检索和显示图像时,我想以相同的尺寸显示所有照片。有什么API可以做到吗?我从谷歌搜索过,我发现那些是关于使用 Takeit 缩放图像的,但不能在网络应用程序中工作。


您可以使用内置的Java 2D API为此(基本 Sun 教程here).

基本上,您需要创建一个Servlet得到一个InputStream中的原始图像doGet()方法,通过 Java 2D API 传递它,然后将其写入OutputStreamHTTP 响应。然后你只需将这个 Servlet 映射到某个特定的url-pattern in web.xml, e.g. /thumbs/*并在中调用这个 ServletsrcHTML 的属性<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());
}

Servlet 映射到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:这是一项相当昂贵的(CPU 密集型)任务,请记住这一点。您可能需要考虑自己预先缓存或预生成拇指。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JSP 如何缩放图像? 的相关文章

随机推荐

  • 无法使用 Gitolite (centos) 添加用户

    我是 gitolite 的新手 我已经在远程服务器上安装了 gitolite 192 168 1 109 所以我可以 git 克隆 gitolite admin git git clone ssh email protected gitol
  • C# 中的 swig - 在可移植类库中找不到 HandleRef

    我正在尝试使用 Swig 将我的 C 代码包装为 C 如果C 文件的输出目标是类库 则没有错误并成功构建 但是我想同时支持 Windows Phone 8 1 和 Windows 8 1 因为这个原因我使用可移植类库而不是普通的类库 在这种
  • 如果初始 makemigrations 的一部分,使用针对查询集的选择的 Django 表单会导致错误

    我想了解此问题的最佳实践 我有一个 Django 表单 其中包含以下内容 class AdvancedSearchForm forms Form CATEGORY OPTIONS Category objects all order by
  • Google Cal API - 检查事件的脚本

    我想构建一个脚本 通过 Google 日历 PHP 客户端检查经过身份验证的用户的 Google 日历 我能够构建一个简单的页面 让用户进行身份验证并授予日历事件权限 我收到一个令牌 然后通过以下方式获取 15 个即将举行的活动 googl
  • 使用 LINQ 获取数据并在网格视图中显示结果

    如何在 C 和 Asp net 中使用 Linq 从数组中获取所有模块 如下所示 其中学生名字 这可能是很容易做到的事情 但未能掌握窍门 请帮忙 谢谢 ArrayList arrList new ArrayList new array li
  • Facebook iOS SDK - 如何为 Xcode 4.3 构建静态库?

    我正在按照此链接中的说明将 Facebook 集成到我的 iOS ARC 应用程序中 我陷入了构建静态库的步骤 https developers facebook com docs mobile ios build 我使用的是 Xcode
  • AVFoundationAudioSettings 的设置 AVAudioTimePitchAlgorithmVarispeed

    根据这些docs 我可以更改 AVAudioPlayer 的某些设置 包括AVAudioTimePitchAlgorithmVarispeed环境 我该如何设置这个值 我需要子类化 AVAudioSetting h 吗 如果不需要使用AVA
  • 在程序选项值(ini 文件)中使用哈希标记

    我在使用 boost 程序选项读取 ini 文件时遇到一些问题 问题是包含哈希标记的键 简单示例 部分 键 xxx yyy 检索密钥 返回 xxx 这是因为井号似乎被解释为注释的开始 因此该行的其余部分被跳过 不幸的是 我无法用其他字符替换
  • 数据表:按数字数据顺序排序不起作用?

    我正在使用 DataTables 版本 1 10 当列中显示的值不是数字时 我想让列可按数值排序 我理解了我需要做的是添加一个data sort属性到每个表格单元格 我尝试将其添加到createdRow方法 但是虽然我可以在 HTML 中看
  • 为什么我的 Java 输出字符串以 % 字符结尾?

    我在 Linux 上使用的 Java 版本是 openjdk版本 16 0 2 2021 07 20 OpenJDK 运行时环境 版本 16 0 2 7 OpenJDK 64 位服务器虚拟机 版本 16 0 2 7 混合模式 这是我从 He
  • 解释 Mike Bostock 节点解析循环 [重复]

    这个问题在这里已经有答案了 我对 JavaScript 和 d3 比较陌生 但我对强制导向布局非常感兴趣 在 Mike Bostock 的力导向可视化中 他倾向于使用以下代码 或类似代码 从链接列表中解析节点 var links sourc
  • rlang:在 NSE 函数中使用冒号快捷方式从...获取名称

    我正在编写一个用于制作人口统计数据表的函数包 我有一个函数 缩写如下 我需要在其中获取几列 我会gather一个数据框 诀窍是我想保持这些列的名称按顺序排列 因为我需要在收集后按该顺序放置一列 在这种情况下 这些列是estimate moe
  • 我应该如何从 Scala 列表中删除第一次出现的对象?

    从 Scala 列表中删除第一次出现的对象的最佳方法是什么 来自 Java 我习惯了List remove Object o 方法从列表中删除第一次出现的元素 现在我在 Scala 中工作 我希望该方法返回一个新的不可变的List而不是改变
  • 如何通过套接字InputStream发送XML数据

    我正在尝试使用基于 XML 的协议用 Java 编写客户端 服务器应用程序 但我有一个很大的问题 看这部分客户端代码 InputStream incoming skt getInputStream I get Stream from Soc
  • XCode 4 控制台不会接受用户输入

    在 XCode 4 中 当我运行这样的代码时 string input cout lt lt Enter command lt lt endl getline cin input cout lt lt You entered lt lt i
  • 具有前向声明错误的循环依赖

    在 A hpp 文件中 我有一个结构 其中有一个 B 类的指针 struct state B b 在 A hpp 文件中 我添加了前向声明 并将 B hpp 文件包含在 A cpp 文件中 A hpp class B 在 B hpp 文件中
  • 无法使用 IdHttp 解码响应内容

    我使用 TIdHttp 来获取网页内容 响应头指示内容编码为utf8 我想在控制台中打印内容为CP936 简体中文 但实际内容不可读 Result TEncoding Utf8 GetString ResponseBuffer 我在 pyt
  • 我如何知道空指针异常源自何处?

    我在制作黑莓应用程序时遇到问题 我发现有人制作了一个教程 它做了我尝试过的事情 我复制了教程应用程序的代码来尝试重新创建它 只是为了看看它的实际效果 结果 空指针异常 我想知道是什么触发了这个 我怎么能够 如果您捕获 Throwable 而
  • 如何在 Google Apps 脚本下的 Browser.msgBox 中将文本加粗

    我将以下 Google 脚本链接到一个工作表 function onOpen var text aux texto bold Browser msgBox AVISOS n n1 Prazo impreter vel text aux pa
  • JSP 如何缩放图像?

    有没有办法缩放图像然后在jsp页面中显示 当检索和显示图像时 我想以相同的尺寸显示所有照片 有什么API可以做到吗 我从谷歌搜索过 我发现那些是关于使用 Takeit 缩放图像的 但不能在网络应用程序中工作 您可以使用内置的Java 2D