`

通过流的方式输出图片

 
阅读更多

通过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();

}

}

 

 %>

 

 

分享到:
评论

相关推荐

    Struts2文件流方式导出下载excel、Txt、image图片

    Struts2文件流方式导出下载excel、Txt、image图片,直接返回给浏览器提示下载,不生成临时文件,直接保存在客户端

    根据输入的路径,php自动生成并输出图片

    1)目前只是png的后缀,其他的后缀可以自己修改 2)根据字体文件的大小,字体文件包太小的话...//字体的引用换成这个方式 $font = realpath("./font/1.ttf"); //字体文件 //$height =$height + $h*$size; //这里给注释掉

    全网最易部署,响应速度最快的ChatGPT环境 PHP版调用OpenAI接口进行问答和画图,采用Stream流模式通信

    采用stream流模式通信,一边生成一边输出,响应速度全网最快。 支持GPT-3.5-Turbo和GPT-4等各种模型(后者需要修改下默认model名称)。 支持Markdown格式文本显示,如表格、代码块。对代码进行了着色,提供了代码...

    Java BIO、NIO、AIO、Netty知识详解(值得珍藏)

    简单来说就是java通过io流方式和外部设备进行交互。 在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输入输出,文件的操作,网络上 的数据传输流,字符串流,对象流等等等。 比如程序从服务器...

    video-live-streaming:带有jpeg的视频实时流媒体呈现在html5和nodejs中

    通过Web套接字以两种不同的方式将数据广播到html5: FFmpeg将流数据转换为图像,然后将其发送到服务器。 服务器合并图像数据并将二进制文件转换为base64,然后通过Web套接字以字符串/ base64格式广播完整图像。 ...

    国标28181平台支持上下级级联支持rtsp/rtmp/HLS输出

     22、支持报警消息(设备上线、下线和设备端报警)通过httpclient方式主动通知  23、支持公网和局域网同时存在  24、支持httpserver,接口支持http+json  25、支持设备上线、下线和设备报警通过httpclient...

    JAVA基础知识点,J2SE部分内容

    字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串(比如对图片文件的操作就只能用字节流) 3-5.一个字符可以是1个字节,也可以是2个或多个字节 一个字节就是8个位,也就是对同一数据源...

    采用ajax实现的图片验证码

    //产生一个输出流,准备把图片以流的方式,输出到客户端 OutputStream out = response.getOutputStream(); //输出在图形缓冲区中,绘制的图片 ImageIO.write(image,"jpg",out); //关闭流 out.close(); ...

    ireport 其主要作用是用来以可视化的方式设计

    用于打印的数据可以通过多种方式获取包括:JDBC, TableModels, JavaBeans, XML,Hibernate(支持HQL查询语言), CSV等。它支持多种输出格式包括:PDF,RTF,XML,XLS,CSV,HTM。  iReport是一个能够创建复杂报表的开源项目...

    javascript/微信小程序中将String进行Base64编码并UTF-8格式输出

    提供一种Base64编码,并输出UTF-8格式的BASE64编码方式。本程序在微信小程序开发工具中已经测试通过。 Base64代码: [javascript] view plain copy print? (function(){ var BASE64_MAPPING = [ 'A','B','C','D',...

    小巧好用的屏幕截图工具绿色汉化破解版(国外最流行)

    可输出BMP、GIF、JPG、PNG、TIF、PDF等文件格式,且输出文件夹位置也可自行设定。 软件内置功能完善的图像编辑器,除提供缩放、旋转、剪切、格式转换、调整大小等基本功能外,还可向图像中加入标题、边框和水印、...

    上传媒资文件至视频点播(aliyun-sdk-vod-upload) .zip

    * 注:图片上传完成后,会返回图片ID和图片地址,也可通过GetImageInfo查询图片信息,参见接口文档 https://help.aliyun.com/document_detail/89742.html * * * 三、m3u8文件上传目前支持2种方式: * 1.上传...

    android获取(采集)网络图片的例子.rar

    首先获取请求的路径,路径为我们想要得到的资源,建立URL对象,抛出异常,得到HttpURLConnection对象,声明请求方式,设置连接超时,得到服务器传回来的数据,相对我们来说输入流,得到数据, 创建一个文件输出流,...

    Java图片查看器 源代码

    //数据流、序列化和文件系统提供系统输入和输出 import java.util.ArrayList;//最大限度地减少实现“随机访问”数据存储(如数组)支持的该接口所需的工作。 import java.awt.image.ConvolveOp; import java.awt....

    过http转国标28181(GB28181-2016)实现动态获取RTSP、RTMP、HLS输出管理平台

    1、支持国标GB28181平台、国标GB28181 IPC和国标GB28181 NVR设备同时接入 (支持GB28181-2011版本和... 22、支持报警消息(设备上线、下线和设备端报警)通过httpclient方式主动通知  23、支持公网和局域网同时存在

    AspJpeg v2.4.0.1.zip

    缩略图片可以保存到磁盘、内存、或者HTTP流 支持三种更改大小方式: nearest-neighbor, bilinear, and bicubic. 可以在图片之上添加图片或者文字. 支持画中画 支持复制,反转,旋转,锐化,灰度调节. 可以调节...

    Html-JavaScriptHelper帮助类.zip

    获取字符流 清除HTML标记 删除文本中带的HTML标记 获取页面的链接正则 匹配页面的图片地址 匹配中的图片路径实际链接 以GET方式抓取远程页面内容 以POST方式抓取远程页面内容 压缩HTML输出 过滤指定HTML标签 加载...

    ireport300

    用于打印的数据可以通过多种方式获取包括:JDBC, TableModels, JavaBeans, XML,Hibernate(支持HQL查询语言), CSV等。它支持多种输出格式包括:PDF,RTF,XML,XLS,CSV,HTM。 iReport是一个能够创建复杂报表的开源项目...

    tensorflow通过模型文件,使用tensorboard查看其模型图Graph方式

    执行下述代码,将数据流图保存为图片,在目录F:/tensorflow/graph下生成文件events.out.tfevents.1508420019.XM-PC import tensorflow as tf from tensorflow.python.platform import gfile graph = tf.get_default...

    aspjpeg的下载和注册码

     缩略图片可以保存到磁盘、内存、或者HTTP流  支持三种更改大小方式: nearest-neighbor, bilinear, and bicubic.  可以在图片之上添加图片或者文字.  支持画中画  支持复制,反转,旋转,锐化,灰度调节.  ...

Global site tag (gtag.js) - Google Analytics