`
liuxi1024
  • 浏览: 390996 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

图片网络传输

阅读更多

1、总体描述

(1)图片压缩

(2)读取压缩后的图片文件,base64进行编码,拼接xml字符串

(3)使用http传输xml

(4)接收端解析xml,还原图片文件

 

 

2、图片压缩demo

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.awt.image.ConvolveOp;
import java.awt.image.Kernel;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class ImageCompress {
	public static void ImageScale(String path, String fileName,	String toFileName) {
		try {
			
			Image image = javax.imageio.ImageIO.read(new File(path + fileName));
			int imageWidth = image.getWidth(null);
			int imageHeight = image.getHeight(null);
			//计算缩放比例
			float scale = getRatio(imageWidth, imageHeight, 130, 130);
			imageWidth = (int) (scale * imageWidth);
			imageHeight = (int) (scale * imageHeight);

			image = image.getScaledInstance(imageWidth, imageHeight,Image.SCALE_AREA_AVERAGING);
			// Make a BufferedImage from the Image.
			BufferedImage mBufferedImage = new BufferedImage(imageWidth,imageHeight, BufferedImage.TYPE_INT_RGB);
			//获取图形上下文
			Graphics2D g2 = mBufferedImage.createGraphics();

			//绘制图像到目标位置
			g2.drawImage(image, 0, 0, imageWidth, imageHeight, Color.white,	null);
			g2.dispose();

			float[] kernelData2 = { -0.125f, -0.125f, -0.125f, -0.125f, 2,-0.125f, -0.125f, -0.125f, -0.125f };
			Kernel kernel = new Kernel(3, 3, kernelData2);
			//使用卷积核的卷积是一种通过输入像素来计算输出像素的空间运算,方法是将核与输入像素邻域相乘。这种运算使得直接邻域可按核数学指定的方式影响输出像素
			//ConvolveOp.EDGE_NO_OP将位于源图像边缘的像素复制为目标中相应的像素,不加修改。
			//构造给定 Kernel、边缘条件和 RenderingHint 对象(可以为 null)的 ConvolveOp。
			ConvolveOp cOp = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null);
			//对 BufferedImage 执行卷积运算。
			mBufferedImage = cOp.filter(mBufferedImage, null);

			FileOutputStream out = new FileOutputStream(path + toFileName);
			//可以正常实现bmp转jpg、png转jpg、gif转jpg
			JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
			encoder.encode(mBufferedImage);
			out.close();
		} catch (FileNotFoundException fnf) {
			fnf.printStackTrace();
		} catch (IOException ioe) {
			ioe.printStackTrace();
		}
	}

	public static float getRatio(int width, int height, int maxWidth,int maxHeight) {
		float Ratio = 1.0f;
		float widthRatio;
		float heightRatio;
		widthRatio = (float) maxWidth / width;
		heightRatio = (float) maxHeight / height;
		if (widthRatio < 1.0 || heightRatio < 1.0) {
			Ratio = widthRatio <= heightRatio ? widthRatio : heightRatio;
		}
		return Ratio;
	}

	public static void main(String[] args) {
		ImageScale("", "SNV31539.JPG", "SNV31539_small.JPG");
	}
}

 

 3、读取压缩后的图片文件,base64进行编码,拼接xml字符串

 

public static String bin2XmlString(File file) {
		byte[] data = null;
		FileInputStream input = null;
		String ret = null;
		int n;
		try {
			data = new byte[(int) file.length()];
			input = new FileInputStream(file);
			n = input.read(data);
			input.close();
			ret = new String(Base64.encodeBase64(data, true));
		} catch (Exception e) {
			e.printStackTrace();
		}
		return ret;
	}

 

4、接收端解析xml,还原图片文件

 

public static boolean xmlString2Bin(String base64String, File file) {
		byte[] data;
		FileOutputStream output = null;
		boolean ret = false;
		try {
			data = Base64.decodeBase64(base64String.getBytes());
			output = new FileOutputStream(file);
			output.write(data);
			output.close();
			ret = true;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return ret;
	}

 

 

分享到:
评论

相关推荐

    通过TCPIP协议实时传输图片halcon,c++.zip

    在IT行业中,TCP/IP协议是网络通信的基础,广泛应用于各种数据传输场景,包括实时传输图片。本项目"通过TCP/IP协议实时传输图片halcon,c++"旨在利用这些技术实现跨计算机的图像共享和处理。以下是对这个项目涉及的...

    C#网络传输图片

    在C#编程环境中,网络传输图片涉及到多个关键知识点,包括文件操作、网络编程以及图像处理。下面将详细解析这些知识点: 1. **C# 文件操作**:在“发送图片”这个场景中,首先需要能够读取本地的图片文件。C#提供了...

    VC下局域网内的图片传输源程序

    这个过程中,开发者需要注意文件的读写操作,如使用CFile类来处理文件的打开、读取和关闭,以及确保数据在网络传输中的完整性。 为了实现点对点的传输,即从一个客户端直接将图片发送到另一个客户端,开发者可能...

    socket网络传输图片

    VC++编写的socket网络传输图片源代码

    C#网络传输图片源代码

    标题 "C#网络传输图片源代码" 指的是使用C#编程语言,通过网络协议(如TCP/IP)发送和接收图片数据的源代码示例。这样的应用可能涉及多种技术,包括但不限于网络套接字(Sockets)、流处理(Streams)和图像处理。 ...

    网络图片传输显示

    图片在传输过程中通常会被转化为二进制流(byte array),这是因为网络传输主要处理的是字节数据。在Android中,我们可以使用HTTP或HTTPS协议通过Socket编程来发送和接收这些字节流。 1. **HTTP/HTTPS通信**:HTTP...

    网络传输图片TCP_Demo

    在IT领域,网络传输是日常工作中不可或缺的一部分,特别是在多媒体数据如图片、音频和视频的分享中。本示例"网络传输图片TCP_Demo"聚焦于使用Socket编程来实现在网络中传输图片,这是一种基础但至关重要的技能。...

    易语言图片传输客户端源码,易语言图片传输服务端源码,易语言图片

    1. **网络通信基础**:易语言图片传输涉及到TCP/IP协议,这是互联网通信的基础。TCP(传输控制协议)提供可靠的数据传输,确保数据包按顺序到达且无丢失,适合图片这类大数据量的传输。 2. **数据编码与解码**:...

    丑陋版qt网络传输jpeg图片

    在“丑陋版qt网络传输jpeg图片”这个项目中,我们聚焦于利用QT来实现在Linux环境下,通过TCP协议进行JPEG图片的传输。尽管“丑陋版”可能指的是界面设计不美观,但核心功能——网络传输是关键。 首先,我们需要理解...

    socket实现的网络传输图片

    在这个例子中,“socket实现的网络传输图片”是一个使用Socket进行图片数据传输的示例。这个源码可能是用某种编程语言(如Java、C++或Python)编写的,它演示了如何通过Socket接口发送和接收图片数据。 1. **Socket...

    MFC实现的网络传输图片

    在本文中,我们将深入探讨如何使用Microsoft Foundation Class (MFC) 库来实现网络传输图片。MFC 是一个由微软开发的C++类库,它为Windows应用程序开发提供了一种结构化的方式,使得开发者能够更方便地利用Windows ...

    MFC实现的网络传输图片.zip_MFC_图像传输_图片_图片 数据 MFC_网络传输

    本项目涉及的是利用MFC实现的网络传输图片功能,这是一个基础且实用的网络编程应用场景,通常涉及到TCP/IP协议、socket编程以及二进制数据的处理。 首先,我们要理解MFC中的网络编程。MFC提供了CSocket类,它是基于...

    无限网络传输工具

    无限网络传输工具是一款专为局域网环境设计的文件传输及聊天应用,旨在提供高效、便捷的通信解决方案。这款工具的出现,使得局域网内的用户无需依赖传统的数据线或者第三方云存储服务,就能轻松地进行文件共享和实时...

    socket实现jpg图片的传输

    本文将深入探讨如何使用Socket来实现JPEG图片的传输,主要基于提供的标题和描述内容。 首先,让我们理解Socket的基本概念。Socket,也被称为套接字,是网络通信中的一个抽象接口,它允许两个应用程序通过网络进行...

    (利用GIF_LZW算法实现的)网络图片传输.zip_gif lzw_huffman jpeg_jpeg_vb 图片_图片传输

    (利用GIF_LZW算法实现的)网络图片传输 技术特点 ~~~~~~~~ 一、使用TCP协议传输数据。理由:稳定性好。 二、使用字节数据流进行传输,理由: A:VB的String存在自动Unicode转换问题,影响速度; B:可以直接发送8位...

    TCPSocket摄像头实时传输视频和图片传输的c++源码

    TCPSocket摄像头实时传输视频和图片的C++源码是一个典型的网络编程应用场景,它涉及到的主要知识点包括TCP套接字编程、图像处理以及网络传输优化。下面将详细解释这些概念。 首先,TCP(Transmission Control ...

    文件图片传输程序

    【文件图片传输程序】是一个基于C语言编写的实用程序,旨在实现文件和图像的网络传输。这个项目对于学习文件操作和网络编程的初学者来说,是一个极好的实践案例。通过这个程序,我们可以深入理解如何利用socket编程...

    socket(网络套接字)传输图片

    3. **编码格式**:图片在传输前可能需要转化为适合网络传输的格式,例如Base64编码,但这种方式会增加传输数据量。 4. **效率优化**:为了提高传输效率,可以考虑使用压缩技术减小图片大小,或者使用高效的传输协议...

    网络通信,图片,文件,字符串传输

    本项目主要关注的是如何通过Java实现网络上的数据传输,包括字符串、文件和图片。下面将详细阐述Java网络通信的基本原理、关键技术以及实现图片和文件传输的策略。 首先,Java中的网络通信主要是基于Socket编程实现...

    \MFC实现的网络传输图片.rar

    在这个"MFC实现的网络传输图片"项目中,开发者利用了MFC库和Socket编程来实现图片在网络中的发送与接收。 1. **MFC简介** MFC是微软为C++开发者设计的一套类库,它基于Windows API,并提供了许多抽象和封装,使得...

Global site tag (gtag.js) - Google Analytics