目录

1、根据传入坐标和图片URL地址对图片进行切图操作

2、将图片转化成Base64位编码、根据传入坐标 算出切点坐标


在开发过程的学习记录,此两个工具类主要是对图像的处理(切图),对文件的想换转化,将文件转化成字节数组、Base64位编码等。

1、根据传入坐标和图片URL地址对图片进行切图操作

import javax.imageio.ImageIO;
import javax.imageio.ImageReadParam;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Iterator;/*** @program: process* @description: 切图工具类* @author: Huyande* @create: 2019-01-17 14:11**/public class CutImageUtils {/*** 传入坐标和图片URL地址  切图 生成图片到指定的目录* @param x* @param y* @param width* @param height* @param imgUrl* @throws Exception*/public static void cut(int x, int y, int width, int height, String imgUrl) throws Exception{byte[] imgBytes = getUrlFileData(imgUrl);FileInputStream is = byteToFile(imgBytes, "cutPic.jpg");ImageInputStream iis = null ;getUrlFileData(imgUrl);Iterator<ImageReader> it= ImageIO.getImageReadersByFormatName("jpg");ImageReader reader = it.next();iis = ImageIO.createImageInputStream(is);reader.setInput(iis, true) ;ImageReadParam param = reader.getDefaultReadParam();Rectangle rect =  new Rectangle(x, y, width, height);param.setSourceRegion(rect);BufferedImage bi=reader.read(0,param);ImageIO.write(bi, "jpg", new File("E:\\cutPic.jpg"));is.close() ;iis.close();}//获取链接地址文件的byte数据public static byte[] getUrlFileData(String fileUrl) throws Exception{URL url = new URL(fileUrl);HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();httpConn.connect();InputStream cin = httpConn.getInputStream();ByteArrayOutputStream outStream = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int len = 0;while ((len = cin.read(buffer)) != -1) {outStream.write(buffer, 0, len);}cin.close();byte[] fileData = outStream.toByteArray();outStream.close();return fileData;}/*** byte[] 转 FileInputStream* @param bytes* @param fileName* @return*/public static FileInputStream byteToFile(byte[] bytes, String fileName) {File file = new File(fileName);FileInputStream fileInputStream = null;try {OutputStream output = new FileOutputStream(file);BufferedOutputStream bufferedOutput = new BufferedOutputStream(output);bufferedOutput.write(bytes);fileInputStream = new FileInputStream(file);file.deleteOnExit();return fileInputStream;} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return fileInputStream;}
}

2、将图片转化成Base64位编码、根据传入坐标 算出切点坐标

import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Base64;
import java.util.Base64.Decoder;
import java.util.Base64.Encoder;
import java.util.Iterator;
import java.util.List;
import javax.imageio.ImageIO;
import javax.imageio.ImageReadParam;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;/*** @program: process* @description: 图像操作工具包* @author: Huyande* @create: 2019-01-17 14:21**/public class OperateImageUtils {private Logger log = LoggerFactory.getLogger(getClass());public static final String DEFAULT_IMG_NAME = "tmpImgName";public static final String DEFAULT_IMG_FORMAT = "jpg";public static final String DEFAULT_DATA_URI = "data:application/octet-stream;base64,";private int x;private int y;private int width;private int height;public OperateImageUtils() {}/*** 构造方法* @param x* @param y* @param width* @param height*/public OperateImageUtils(int x, int y, int width, int height) {this.x = x;this.y = y;this.width = width;this.height = height;}/**** 构造方法  传入一个集合坐标值  算出 x,y,width,height* @param bboxes*/public OperateImageUtils(List<List<Integer>> bboxes) {int upLeftX = ((Integer) ((List) bboxes.get(0)).get(0)).intValue();int upLeftY = ((Integer) ((List) bboxes.get(0)).get(1)).intValue();int upRightX = ((Integer) ((List) bboxes.get(1)).get(0)).intValue();int downLeftY = ((Integer) ((List) bboxes.get(3)).get(1)).intValue();int width = Math.abs(upRightX - upLeftX);int height = Math.abs(downLeftY - upLeftY);this.x = upLeftX;this.y = upLeftY;this.width = width;this.height = height;}/**** @param imgBytes* @param suffix* @return*/public byte[] cut(byte[] imgBytes, String suffix) {try {ImageInputStream iis = null;FileInputStream is = byteToFile(imgBytes, "tmpImgName");Iterator it = ImageIO.getImageReadersByFormatName(suffix);ImageReader reader = (ImageReader) it.next();iis = ImageIO.createImageInputStream(is);reader.setInput(iis, true);ImageReadParam param = reader.getDefaultReadParam();Rectangle rect = new Rectangle(this.x, this.y, this.width, this.height);param.setSourceRegion(rect);BufferedImage bi = reader.read(0, param);byte[] cutImg = imageToBytes(bi, "jpg");return cutImg;} catch (IOException e) {this.log.error("image file cut fail, error information is : {} ", e);}return null;}public byte[] imageToBytes(BufferedImage bImage, String format) {ByteArrayOutputStream out = new ByteArrayOutputStream();try {ImageIO.write(bImage, format, out);} catch (IOException e) {e.printStackTrace();}return out.toByteArray();}public int getX() {return this.x;}public void setX(int x) {this.x = x;}public int getY() {return this.y;}public void setY(int y) {this.y = y;}public int getWidth() {return this.width;}public void setWidth(int width) {this.width = width;}public int getHeight() {return this.height;}public void setHeight(int height) {this.height = height;}/***  通过文件地址 获取到文件 将文件转化成 byte 数组* @param fileUrl* @return*/public byte[] getUrlFileData(String fileUrl) {try {URL url = new URL(fileUrl);HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();httpConn.connect();InputStream cin = httpConn.getInputStream();ByteArrayOutputStream outStream = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int len = 0;while ((len = cin.read(buffer)) != -1) {outStream.write(buffer, 0, len);}cin.close();byte[] fileData = outStream.toByteArray();outStream.close();return fileData;} catch (IOException e) {this.log.error("get imageFile by fileUrl fail, error information is : {} ", e);}return null;}/*** 将byte 数组 转化成文件输入流* @param bytes* @param fileName* @return*/public FileInputStream byteToFile(byte[] bytes, String fileName) {File file = new File(fileName);FileInputStream fileInputStream = null;try {OutputStream output = new FileOutputStream(file);BufferedOutputStream bufferedOutput = new BufferedOutputStream(output);bufferedOutput.write(bytes);fileInputStream = new FileInputStream(file);file.deleteOnExit();return fileInputStream;} catch (IOException e) {this.log.error("bytes to Image file fail, error information is : {} ", e);}return fileInputStream;}/*** * @param imageUrl* @param suffix* @return*/public String getBase64Url(String imageUrl, String suffix) {byte[] imgBuffer = null;if (imageUrl.contains("data:application/octet-stream;base64,"))imgBuffer = getBytesByBase64(imageUrl);else {imgBuffer = getUrlFileData(imageUrl);}if ((suffix.isEmpty()) || (null == suffix)) {suffix = "jpg";}byte[] cutImg = cut(imgBuffer, suffix);String result = Base64.getEncoder().encodeToString(cutImg);return "data:application/octet-stream;base64," + result;}public byte[] getBytesByBase64(String base64Uri) {String base64Code = base64Uri.substring(base64Uri.indexOf(",") + 1);byte[] buffer = Base64.getDecoder().decode(base64Code);return buffer;}/***   将本地文件转换成字节数组* @param fileUrl* @return*/public byte[] getFileData(String filePath) {try {File file = new File(filePath);InputStream cin =new FileInputStream(file);ByteArrayOutputStream outStream = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int len = 0;while ((len = cin.read(buffer)) != -1) {outStream.write(buffer, 0, len);}cin.close();byte[] fileData = outStream.toByteArray();outStream.close();return fileData;} catch (IOException e) {this.log.error("get imageFile by fileUrl fail, error information is : {} ", e);}return null;}/*** * @param imageUrl* @param suffix* @return*/public String getBase64Url_Flie(String imageUrl, String suffix) {byte[] imgBuffer = null;imgBuffer = getFileData(imageUrl);if ((suffix.isEmpty()) || (null == suffix)) {suffix = "jpg";}byte[] cutImg = cut(imgBuffer, suffix);String result = Base64.getEncoder().encodeToString(cutImg);return "data:application/octet-stream;base64," + result;}}

根据传入坐标和图片URL地址对图片进行切图操作、将图片转化成Base64位码相关推荐

  1. php 获取内容页图片,织梦DEDECMS内容页获取图片URL地址的方法

    织梦DEDECMS内容页获取图片URL地址的方法 {dede:sql sql="select * from dede_uploads where arcid = ~id~"} [f ...

  2. 图片表情制作,QQ斗图生成,搜狗图片搜索,自适应支持手机浏览

    介绍: 自适应支持手机浏览 图片表情制作 QQ斗图生成 搜狗图片搜索 可以给自己网站吸粉,源码是自适应的手机也可以浏览! 源码集成了搜狗搜索图片接口,可以一键搜索百万图片,还有表情制作等模块 网盘下载 ...

  3. java 生成纯色图片_java实现切图并且判断图片是不是纯色/彩色图片

    java实现切图并且判断图片是不是纯色/彩色图片 发布时间:2020-08-30 15:45:30 来源:脚本之家 阅读:92 作者:点墨花花 整理文档,搜刮出一个java实现切图并且判断图片是否是纯 ...

  4. 通过文件url地址获取base64;通过图片url地址获取base64;js获取文件的base64

    本篇是通过url地址获取文件的base64 如果想要通过File文件获取base64查看这篇 以下代码可直接复制使用!注意第9行的图片地址更改下 <template><div cla ...

  5. [转载]将Excel中的图片URL地址转成图片文件

    原博https://blog.csdn.net/lsg9012/article/details/77162976 前阵子从数据库中导出数据给业务,但是图片是个URL,业务需要在 Excel 中直接显示 ...

  6. python 乱码问题(编码url地址,python中open中文图片)

    首先是解析url地址 url地址形如下面的格式,%E4%B8...... 通过urllib.unquote()解析 我这串乱码的意思是:%E4%B8%AD%E6%96%87 = 中文 i_path = ...

  7. Java通过图片url地址获取图片base64位字符串的两种方式

    工作中遇到通过图片的url获取图片base64位的需求.一开始是用网上的方法,通过工具类Toolkit,虽然实现的代码比较简短,不过偶尔会遇到图片转成base64位不正确的情况,至今不知道为啥. 之后 ...

  8. 通过图片url地址来识别图片验证码,不是图片文件 不是图片文件 不是图片文件

    前言 之前一直在做Python自动化登录系统,发现验证码是挡在点击登录的拦路虎,在网上查询发现可以通过ddddocr来识别验证码. ocr = ddddocr.DdddOcr() #存在本地的验证码 ...

  9. 实用形ps切图技巧,图片格式及其相关

    写在前面 之前写了两篇前端图片相关的内容(前端ps切图方法,图文详细,css sprite雪碧图制作,使用以及相关,图文gif),本文是面向前端小白的,搜集整理的一些切图技巧,及其相关内容. 关于版本 ...

最新文章

  1. kerberos 身份认证 简介
  2. 时序数据库InfluxDB
  3. 在IntelliJ IDEA里创建Spring Boot项目
  4. python 提升工作效率_Python那些事——5个提升生产效率的Python开发和配置的小技巧...
  5. 地球物理模型-薄互层-桔灯勘探
  6. 1000道Python题库系列分享20(43道填空与判断题)
  7. Unity Js与C#脚本通信
  8. 手稿生成 HTML 代码 SketchCode
  9. 读《JavaScript语言精粹(修订版)》心得
  10. BZOJ1566 [NOI2009]管道取珠 【dp】
  11. bootstrap交互式网页设计工具_3款强大的BootStrap的可视化制作工具推荐
  12. 在VMware安装Ubuntu后一直停留在VMware Easy Install
  13. 电脑硬盘为什么要分区
  14. 电梯轿厢内电动车自行车人数据集,VOC标签格式已标注
  15. Win11删除英文输入法的方法教程
  16. 字节跳动Data数据平台/数据分析招聘
  17. 私有云盘的搭建(owncloud、seafile)
  18. PySpark处理数据并图表分析
  19. ES6基本知识及API
  20. Python数据可视化之南丁格尔玫瑰图

热门文章

  1. active set + serving cell
  2. 一文带你看透 GDB 的 实现原理 -- ptrace真香
  3. 读书:历史 -- 空王冠
  4. C++ 多线程:时间控制
  5. IDEA新建一个多maven模块工程(有图)
  6. 算法 - 字符串匹配
  7. 【D3】transition API
  8. qt中定时器Timer的使用
  9. 交换两个变量的值不使用第三个变量(Java)
  10. 【译文转帖】用C#写COM组件 Building COM Objects in C#