通过流的方式输出图片

通过servlet的方式输出图片流 (类似验证码的生成)

 这个模块挺大,我仅说说用servlet显示图片部分。我先说说用servlet显示图片的一个流程:

 1. 设置response的输出类型:

    对应的语句--response.setContentType("image/gif;charset=GB2312") ,response  

    便能输出gif图片,"image/gif;charset=GB2312"便是输出类型,当然你可以输出

    "image/jpg;charset=GB2312"类型文件。

 2. 得到文件流:

    servlet是以流的形式件图片文件从服务器读出,通过response将流发到浏览器的。

 3. 得到输出流:

    对应的语句--OutputStream output = response.getOutputStream();

    当然,处理图片文件需要以二进制形式的流。

 4. 文件流的编码(但也不一定必须编码的,如果不是文件流,则必须编码)

    所以我给大家一个用编码的代码和不用编码的代码.

  顺便说一句,sun公司仅提供了jpg图片文件的编码api。

    

    我想基本流程都讲完了,下面我把代码拿给大家看一下,大家自然一目了然了:

package xjw.personal.servet;

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

import com.sun.image.codec.jpeg.*;//sun公司仅提供了jpg图片文件的编码api

import javax.imageio.stream.*;

import java.awt.*;

import java.awt.image.BufferedImage;

public class ShowPicture  extends HttpServlet

{

     private static final String GIF="image/gif;charset=GB2312";//设定输出的类型

     private static final String JPG="image/jpeg;charset=GB2312";

     public void init()  throws ServletException

     {

     }

     public void doGet(HttpServletRequest request, HttpServletResponse response)

                  throws IOException, ServletException

     {

        doPost(request, response);

     }

 

    public void doPost(HttpServletRequest request, HttpServletResponse response)

                 throws IOException, ServletException

   {

        

        String spec=request.getParameter("spec");//输出图片的类型的标志

     int int_spec=Integer.parseInt(spec);

        if(spec==1)    

        {

            String imagePath="/jfgg/b1.jpg";//图片相对web应用的位置

        }

        else

        {

              String imagePath="/jfgg/b2.gif";//图片相对web应用的位置

        }    

        

       OutputStream output = response.getOutputStream();//得到输出流

       if(imagePath.toLowerCase().endsWith(".jpg"))//使用编码处理文件流的情况:

      {

     response.setContentType(JPG);//设定输出的类型

          //得到图片的真实路径      

          imagePath = getServletContext().getRealPath(imagePath);

         //得到图片的文件流

          InputStream imageIn = new FileInputStream(new File(imagePath));

         //得到输入的编码器,将文件流进行jpg格式编码

     JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(imageIn);

         //得到编码后的图片对象

         BufferedImage image = decoder.decodeAsBufferedImage();

         //得到输出的编码器

          JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(output);

          encoder.encode(image);//对图片进行输出编码

          imageIn.close();//关闭文件流

       }

       if(imagePath.toLowerCase().endsWith(".gif"))//不使用编码处理文件流的情况:

      {

    response.setContentType(GIF);

    ServletContext context = getServletContext();//得到背景对象

    InputStream imageIn=context.getResourceAsStream(imagePath);//文件流

         BufferedInputStream bis=new BufferedInputStream(imageIn);//输入缓冲流

    BufferedOutputStream bos=new BufferedOutputStream(output);//输出缓冲流

    byte data[]=new byte[4096];//缓冲字节数

    int size=0; 

    size=bis.read(data);

    while (size!=-1)

    {

       bos.write(data,0,size);

            size=bis.read(data);

    }

    bis.close();

    bos.flush();//清空输出缓冲流

         bos.close();

    }

      output.close();

            

     }

}

最后是如何调用,你可以简单的映射一下servelt,我就将servet的名映射为

ShowPic,  于是下代码调用

    <html>

    <body>

    <img src="ShowPic?spec=2"></a>

    </body>

    </html>

通过JSP文件的方式输出图片流(区分TOMCAT和WEBLOGIC,通验证码类似,可以参看应用服务器和WEB服务器中的说明)

TOMCAT的方式(语法比较随意,可以有多种写法,以下仅列举几种)

<%@page import=" java.io.*"%>

<%@page import="java.awt.image.BufferedImage"%>

<%@page import=" javax.imageio.*"%>

<%@page import=" com.sun.image.codec.jpeg.*"%>

<%@page import=" com.htsoft.core.util.CreateFile"%>

<%@page pageEncoding="UTF-8" %>

<%

String path=request.getParameter("path");

 

String file = CreateFile.getFilepath()+path;

 

 

InputStream imageIn=null;

 

try{

//in=new FileInputStream(file);

//BufferedImage image=ImageIO.read(in);//读取图片

response.setContentType("image/jpeg;charset=UTF-8");

OutputStream output=response.getOutputStream();

 

//得到图片的文件流

        imageIn = new FileInputStream(new File(file));

        //得到输入的编码器,将文件流进行jpg格式编码

        JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(imageIn);

        //得到编码后的图片对象

        BufferedImage image = decoder.decodeAsBufferedImage();

        //得到输出的编码器

        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(output);

        //

        JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(image);

param.setQuality(1,false);

encoder.encode(image, param);//对图片进行输出编码

        //encoder.encode(image);//对图片进行输出编码

        imageIn.close();//关闭文件流

 

out.clear();

out = pageContext.pushBody();

}catch(FileNotFoundException e){

System.out.println("!新的图片流输出方式 :"+file);

}finally{

if(imageIn!=null){

imageIn.close();

}

}

 

 %>

<%@page contentType="image/jpeg" import="java.awt.*,com.htsoft.core.util.CreateFile,com.sun.image.codec.jpeg.*,java.awt.image.*,java.io.*,java.util.*,javax.imageio.*" pageEncoding="UTF-8" %>

<%

String path=request.getParameter("path");

String file = CreateFile.getFilepath()+path;

InputStream imageIn=null;

 

try{

response.setContentType("image/jpeg;charset=UTF-8");

OutputStream output=response.getOutputStream();

 

//得到图片的文件流

        imageIn = new FileInputStream(new File(file));

        //得到输入的编码器,将文件流进行jpg格式编码

        JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(imageIn);

        //得到编码后的图片对象

        BufferedImage image = decoder.decodeAsBufferedImage();

        //得到输出的编码器

        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(output);

        //

        JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(image);

param.setQuality(1,false);

encoder.encode(image, param);//对图片进行输出编码

        //encoder.encode(image);//对图片进行输出编码

        imageIn.close();//关闭文件流

 

out.clear();

out = pageContext.pushBody();

}catch(FileNotFoundException e){

System.out.println("!新的图片流输出方式 :"+file);

}finally{

if(imageIn!=null){

imageIn.close();

}

}

 

 %>

<%@page contentType="image/jpeg" import="java.awt.*,com.htsoft.core.util.CreateFile,com.sun.image.codec.jpeg.*,java.awt.image.*,java.io.*,java.util.*,javax.imageio.*" pageEncoding="UTF-8" %>

<%

String path=request.getParameter("path");

String file = CreateFile.getFilepath()+path;

InputStream imageIn=null;

 

try{

response.reset();

response.setContentType("image/jpeg;charset=UTF-8");

OutputStream output=response.getOutputStream();

 

//得到图片的文件流

        imageIn = new FileInputStream(new File(file));

        //得到输入的编码器,将文件流进行jpg格式编码

        JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(imageIn);

        //得到编码后的图片对象

        BufferedImage image = decoder.decodeAsBufferedImage();

        //得到输出的编码器

        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(output);

        //

        JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(image);

param.setQuality(1,false);

encoder.encode(image, param);//对图片进行输出编码

        //encoder.encode(image);//对图片进行输出编码

        imageIn.close();//关闭文件流

 

out.clear();

out = pageContext.pushBody();

}catch(FileNotFoundException e){

System.out.println("!新的图片流输出方式 :"+file);

}finally{

if(imageIn!=null){

imageIn.close();

}

}

 

 %>

 

WEBLOGIC的方式(也有几种写法,可以参考,都是通过实验验证过的)

<%@page contentType="image/jpeg" import="java.awt.*,com.htsoft.core.util.CreateFile,com.sun.image.codec.jpeg.*,java.awt.image.*,java.io.*,java.util.*,javax.imageio.*" pageEncoding="UTF-8" %>

<%

String path=request.getParameter("path");

String file = CreateFile.getFilepath()+path;

InputStream imageIn=null;

 

try{

response.reset();

response.setContentType("image/jpeg;charset=UTF-8");

OutputStream output=response.getOutputStream();

 

//得到图片的文件流

        imageIn = new FileInputStream(new File(file));

        //得到输入的编码器,将文件流进行jpg格式编码

        JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(imageIn);

        //得到编码后的图片对象

        BufferedImage image = decoder.decodeAsBufferedImage();

        //得到输出的编码器

        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(output);

        //

        JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(image);

param.setQuality(1,false);

encoder.encode(image, param);//对图片进行输出编码

        //encoder.encode(image);//对图片进行输出编码

        imageIn.close();//关闭文件流

 

//out.clear();

//out = pageContext.pushBody();

}catch(FileNotFoundException e){

System.out.println("!新的图片流输出方式 :"+file);

}finally{

if(imageIn!=null){

imageIn.close();

}

}

 

 %>

<%@page contentType="image/jpeg" import="java.awt.*,com.htsoft.core.util.CreateFile,com.sun.image.codec.jpeg.*,java.awt.image.*,java.io.*,java.util.*,javax.imageio.*" pageEncoding="UTF-8" %>

<%

String path=request.getParameter("path");

String file = CreateFile.getFilepath()+path;

InputStream imageIn=null;

 

try{

response.reset();

response.setContentType("image/jpeg;charset=UTF-8");

OutputStream output=response.getOutputStream();

 

//得到图片的文件流

        imageIn = new FileInputStream(new File(file));

        //得到输入的编码器,将文件流进行jpg格式编码

        JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(imageIn);

        //得到编码后的图片对象

        BufferedImage image = decoder.decodeAsBufferedImage();

        //得到输出的编码器

        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(output);

        //

        JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(image);

param.setQuality(1,false);

encoder.encode(image, param);//对图片进行输出编码

        //encoder.encode(image);//对图片进行输出编码

        imageIn.close();//关闭文件流

        output.close();

 

//out.clear();

//out = pageContext.pushBody();

}catch(FileNotFoundException e){

System.out.println("!新的图片流输出方式 :"+file);

}finally{

if(imageIn!=null){

imageIn.close();

}

}

 

 %>

<%@page contentType="image/jpeg" import="java.awt.*,com.htsoft.core.util.CreateFile,com.sun.image.codec.jpeg.*,java.awt.image.*,java.io.*,java.util.*,javax.imageio.*" pageEncoding="UTF-8" %>

<%

String path=request.getParameter("path");

String file = CreateFile.getFilepath()+path;

InputStream imageIn=null;

 

try{

response.reset();

response.setContentType("image/jpeg;charset=UTF-8");

OutputStream output=response.getOutputStream();

 

//得到图片的文件流

        imageIn = new FileInputStream(new File(file));

        //得到输入的编码器,将文件流进行jpg格式编码

        JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(imageIn);

        //得到编码后的图片对象

        BufferedImage image = decoder.decodeAsBufferedImage();

        //得到输出的编码器

        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(output);

        encoder.encode(image);//对图片进行输出编码

        imageIn.close();//关闭文件流

        output.close();

 

//out.clear();

//out = pageContext.pushBody();

}catch(FileNotFoundException e){

System.out.println("!新的图片流输出方式 :"+file);

}finally{

if(imageIn!=null){

imageIn.close();

}

}

 

 %>

 

 

Web前端开发技术:实验14-16 实验14 1. 编写JavaScript程序实现“九九乘法口诀”表,如图14-40所示。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>九九乘法表</title> </head> <body> <h1>九九乘法表</h1> </body> <scri 阅读详情

相关推荐

百度飞桨+文心大模型实战:生成式AI工程师认证备考全攻略(含真题解析)

本文详细解析百度飞桨与文心大模型结合的生成式AI工程师认证备考策略,涵盖认证体系、学习路径、核心技能突破及真题分析。帮助开发者掌握大模型原理、飞桨平台操作和文心大模型应用,高效通过工信部与百度联合认证考试。

loss4bartender的博客 683

Servlet 入门—输出图片

今天学习的是如何通过访问后台的一个servlet 就能看到一个图片,注意这里不是 html 加载的图片,而是从服务器返回的。比如日常上网见到的图片验证码就是通过这个来实现的。 由于之前我们都是通过 web.xml 来配置我们的 servlet,今天我们就使用注解的方式来实现。(注意必须使用的是 servlet 3.0 及以上的版本) 代码实操 1. 编写 servlet /** * Desc: ImageServlet * Author: Xu He * created: 2021/9/

不要让任何事情成为你不去学习的理由。 2126

高效管理Node.js版本与pnpm安装全攻略

本文提供了一套高效管理Node.js版本与pnpm安装的完整攻略。针对开发中常见的版本冲突和磁盘空间问题,详细介绍了如何在Windows和Ubuntu系统上安装并配置pnpm,并重点讲解了如何利用其内置的`pnpm env`命令进行Node.js版本管理,实现一站式环境管理,提升开发效率。

weixin_28840591的博客 314

response字节输出流输出图片

字节输出流 response.getOutputStream() 通过io字节读取路径下的文件,形成输出流到response返回给页面: // 设置响应的格式 response.setContentType("image/jpg"); //字节输入流 InputStream in = new FileInputStream("C:\\Users\\sorry\\OneDrive\\图片\\本机照片\\ov.jpg"); //字节输

stray_0212的博客 3090

Ubuntu 22.04 实战:为WIFI6网卡Realtek RTL8852BE手动编译驱动指南

本文详细介绍了在Ubuntu 22.04系统上为Realtek RTL8852BE WIFI6网卡手动编译驱动的完整指南。从问题诊断、环境准备到源码获取、编译安装,逐步解决驱动缺失问题,并提供常见问题排查和性能优化建议,帮助用户充分发挥WIFI6网卡性能。

weixin_30808693的博客 479

iStoreOS路由器(openwrt软路由) AdGuard Home 客户端 IP 总是 localhost(127.0.0.1)?这样设置让你精准识别真实IP!

在iStoreOS等软路由上部署AdGuard Home时,客户端IP常显示为localhost(127.0.0.1)。本文详细介绍如何让adguardhome直接识别客户端真实IP🌐,帮助你实现网络流量的精准追踪和管理。🔍

XiaoqiangClub的博客 2255

【Java】如何通过一次请求获取多张图片

该方案的优点在于能够在一个请求中同时携带多张图片的数据,能够减少代码的编写和更加易于维护的特性不足在于Base64编码的图片体积会比原图片大1/3,会多出部分的网络流量使用。

CN_016的博客 4万+

【单智能体】AI 数据分析智能体案例讲解(附完整源码)

本案例将引导您构建一个基于 AI 的数据分析智能体,让用户能够通过自然语言查询来分析 CSV 和 Excel 文件中的数据,无需掌握 SQL 知识。该智能体使用 Agno Agent 框架集成 OpenAI GPT-4o 模型,并利用 DuckDB 提供高效的数据处理能力。

rengang66的博客 239

java web读取图片_Java Web 读取本地图片,以流的方式返回在页面

WEB项目读取不在项目路径中放的文件,类似于E:/的某个文件,是访问不到的,除了在Tomcat下配置虚拟路径,下面就是这种方法@RequestMapping(value = "/pic/mid-{mediaid:.*}", method = RequestMethod.GET)public void getpicByMediaid(HttpServletRequest request, HttpS...

weixin_30671363的博客 1040

【WRF模拟】保存wrf输出文件到指定目录+仅输出指定空间域/变量文件

修改wrf命令以更改指定输出文件目录等

WW、forever的博客 544

2026年数字IC设计华为笔试带答案解析

这篇文章是一份数字IC设计工程师笔试的试卷结构和部分题目解析。试卷包含单选题31题(每题2分)、多选题10题(每题4分)和简答/编程题4题(每题7分),总分130分,考试时长120分钟。 摘要重点: 试卷涵盖数字IC设计的关键知识点,包括Verilog语法、时序逻辑、状态机设计、跨时钟域处理等; 题目解析详细说明了各选项的正确性,如非阻塞赋值特性(D错误)、功耗影响因素(C与组合逻辑级数弱相关)等; 包含实际工程问题,如DDR4接口电平(SSTL-1.2)、卡诺图变量排序(格雷码)等; 部分题目考察基础概念

Open 371

使用流的方式往页面前台输出图片

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33919950的博客 812

TC397 EB MCAL开发从0开始系列 之 [17.1] ETH配置实战 - ping/发送

TC397 MCAL 从0开始之 ETH ping测试

yy九歌的博客 1507

PDF和图片以流的方式输出到前台预览总结

1.pdf预览用的是pdf.js,参考步骤:https://zhixinghh-163-com.iteye.com/blog/2315574 2.pdf预览的前后台关键代码(前提是下载到pdf.js压缩包) (1)直接点击文件调用window.open(viewer.html路径+fileName),并在url拼接文件名 (2).在view.html中对其中的css和js设置正确的路径 (3)vi...

weixin_42410730的博客 4221

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

[输出流]将图片以流的方式读取并显示

数据库中保存的是clob类型的流 读取方法如下: private void cxXP(HttpServletRequest request,HttpServletResponse response){ String userName = (String) request.getSession().getAttribute("username")==null?"":(String) req

海阔天空的专栏 1637

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

ASP.net流的方式输出图片或文件

using System;using System.Collections;using System.Configuration;using System.Data;using System.Linq;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.HtmlControls;usi...

weixin_33852020的博客 426

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

java web 输出图片流_Java Web 读取本地图片,以流的方式返回在页面

WEB项目读取不在项目路径中放的文件,类似于E:/的某个文件,是访问不到的,除了在Tomcat下配置虚拟路径,下面就是这种方法@RequestMapping(value= "/pic/mid-{mediaid:.*}", method =RequestMethod.GET)public voidgetpicByMediaid(HttpServletRequest request, HttpServ...

weixin_39676972的博客 977

026. asp.net中将图片以二进制方式保存到数据库并以HTTP流方式输出

保存到数据库中 protected void imgbtnCreate_Click(object sender, ImageClickEventArgs e) { string PerHomeName=tbPerHomeName.Text;//获取空间名 string PerHomeSign=txtPerS...

weixin_30367543的博客 193

《不同的图片输出方式》

《不同的图片输出方式》

weixin_52236586的博客 529

文件以流的方式返回,图片流返回

文件以流的方式返回 /** * 根据图片路径获取文件流 * * @param response 返回值 * @param path 图片路径 * @throws ServletException * @throws IOException */ @ApiOperation("根据图片路径获取文件流") @GetMapping("/getPresentImageStream") public void service(HttpServletResponse respo.

jyblims的博客 1528

生成二维码图片并下载

简单业务说明:生成图片(此为生成二维码图片)之后,以流方式输出。 代码如下: /** * 下载二维码,二维码存放查询当前学时记录的链接 *@description *@author **** *@date 2018-8-22下午2:17:06 * @return */ public String downPersonQrCode(){ UserSession us =...

幸福不是选择题的博客 594

java返回图片流_springMVC 返回流图片显示,前端接受流

后端代码:@RequestMapping(value = "read")public void index(Model model, HttpServletRequest req,HttpServletResponse resp, String attachmentId) {byte [] bytes = null;ServletOutputStream sos =null;// 将图像输出到Se...

weixin_36152824的博客 3005

java 图片io流_关于JavaIO流的图片读取

关于JavaIO流的图片读取自我介绍一下大家好,新的一年,新的一个学期…我是一个大二的学生,我姓林。最近Java刚刚学到IO流这一板块知识。在此,发表一下关于IO流的图片读取总结的心得还有思路…简单介绍一下IO板块中有输出流还有输入流,后面还有缓冲流等等 ,现在简单介绍输出流还有输入流在Java的IO这一板块中,有输入流InPutStream(当然,这是输入流的父类也是抽象类)它的子类是FileI...

weixin_32757449的博客 1220

java servlet 返回图片_Servlet以流的形式返回图片

import java.awt.image.BufferedImage;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import javax.servlet.ServletExc...

weixin_36058866的博客 635

二进制图片在html页面显示出来的,将图片的二进制字节字符串在HTML页面以图片形式输出...

具体实现代码如下:1、新建一个一般处理程序: Image.ashxusing System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Net;using System.Drawing.Imaging;using System.IO;namespace Test{/// ///测试...

weixin_39983993的博客 2139
上一篇: 验证码在TOMCAT和WEBLOGIC下面的区别
下一篇: WebLogic如何设置session超时时间
secondsyy
博客等级 码龄19年 3粉丝 151原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值