java png 缩放_JAVA 图片的缩放,和压缩,PNG背景透明

2023-11-09

public

class

ImgFactory

{

private

Logger

log

=

LoggerFactory

.

getLogger

(

ImgFactory

.

class

);

private

File

_saveFile

;

private

BufferedImage

_sourceBufferedImage

;

public

static

final

int

LETF

=

1

;

public

static

final

int

RIGHT

=

2

;

public

static

final

int

CENTER

=

3

;

public

static

final

int

ABOVE

=

4

;

public

static

final

int

BELOW

=

5

;

private

BufferedImage

_waterMarker

;

private

int

markerX

;

private

int

markerY

;

private

int

markerWidth

;

private

int

markerHeight

;

public

ImgFactory

(

String

soursePath

,

String

savePath

)

throws

IOException

{

this

(

new

File

(

soursePath

),

new

File

(

savePath

));

}

public

ImgFactory

(

File

_sourseFile

,

File

_saveFile

)

throws

IOException

{

if

(

_sourseFile

==

null

||

_saveFile

==

null

){

throw

new

NullPointerException

(

"图片文件不能为null"

);

}

if

(!

_sourseFile

.

exists

()){

throw

new

FileNotFoundException

(

_sourseFile

.

getAbsolutePath

()+

"not found!"

);

}

this

.

_sourceBufferedImage

=

ImageIO

.

read

(

_sourseFile

);

this

.

_saveFile

=

_saveFile

;

}

public

void

compress

(

int

width

,

int

height

)

throws

IOException

{

//---缩放图片

Image

_compressImage

=

_sourceBufferedImage

.

getScaledInstance

(

width

,

height

,

Image

.

SCALE_SMOOTH

);

//----图像透明,设置

BufferedImage

_bufferedImage

=

new

BufferedImage

(

width

,

height

,

this

.

_sourceBufferedImage

.

getType

());

Graphics

graphics

=

_bufferedImage

.

getGraphics

();

Graphics2D

graphics2d

=(

Graphics2D

)

graphics

;

//---绘制图片

graphics2d

.

drawImage

(

_compressImage

,

0

,

0

,

null

);

saveImg

(

_bufferedImage

);

}

public

void

compress

(

float

radio

)

throws

IOException

{

int

_width

=

_sourceBufferedImage

.

getWidth

();

int

_height

=

_sourceBufferedImage

.

getHeight

();

float

_toWidth

=

_width

;

float

_toHeight

=

_height

;

if

(

radio

!=

0

){

_toWidth

*=

radio

;

_toHeight

*=

radio

;

}

compress

(

Math

.

round

(

_toWidth

),

Math

.

round

(

_toHeight

));

}

public

void

setWaterMarker

(

String

imgPath

,

int

x

,

int

y

,

int

width

,

int

height

)

throws

IOException

{

this

.

_waterMarker

=

ImageIO

.

read

(

new

File

(

imgPath

));

this

.

markerX

=

x

;

this

.

markerY

=

y

;

this

.

markerWidth

=

width

;

this

.

markerHeight

=

height

;

}

public

void

zoom

(

int

width

,

int

height

,

boolean

isCompress

)

throws

IOException

{

if

(

isCompress

){

compress

(

width

,

height

);

}

else

{

BufferedImage

_bufferedImage

=

new

BufferedImage

(

width

,

height

,

this

.

_sourceBufferedImage

.

getType

());

Graphics

graphics

=

_bufferedImage

.

getGraphics

();

Graphics2D

graphics2d

=(

Graphics2D

)

graphics

;

//---绘制图片

graphics2d

.

drawImage

(

this

.

_sourceBufferedImage

,

0

,

0

,

width

,

height

,

null

);

//--

saveImg

(

_bufferedImage

);

}

}

public

void

zoom

(

float

radio

,

boolean

isCompress

)

throws

IOException

{

int

_width

=

_sourceBufferedImage

.

getWidth

();

int

_height

=

_sourceBufferedImage

.

getHeight

();

float

_toWidth

=

_width

;

float

_toHeight

=

_height

;

if

(

radio

!=

0

){

_toWidth

*=

radio

;

_toHeight

*=

radio

;

}

zoom

(

Math

.

round

(

_toWidth

),

Math

.

round

(

_toHeight

)

,

isCompress

);

}

public

String

getFileSuffix

(

File

file

)

{

if

(

file

==

null

)

{

return

null

;

}

return

getFileSuffix

(

file

.

getName

());

}

public

String

getFileSuffix

(

String

fileName

)

{

if

(

fileName

==

null

){

return

null

;

}

String

suffix

=

""

;

int

i

=

fileName

.

lastIndexOf

(

'.'

);

if

(

i

>

0

&&

i

<

fileName

.

length

()

-

1

)

{

suffix

=

fileName

.

substring

(

i

+

1

);

}

return

suffix

;

}

public

void

setSourceFile

(

File

sourseFile

)

throws

IOException

{

this

.

_sourceBufferedImage

=

ImageIO

.

read

(

sourseFile

);

}

public

void

setSourceFile

(

String

path

)

throws

IOException

{

setSaveFile

(

new

File

(

path

));

}

public

void

setSaveFile

(

File

_saveFile

)

{

this

.

_saveFile

=

_saveFile

;

}

public

void

setSaveFile

(

String

path

){

setSaveFile

(

new

File

(

path

));

}

public

void

saveImg

(

BufferedImage

bufferedImage

)

throws

IOException

{

Graphics2D

graphics2d

=(

Graphics2D

)

bufferedImage

.

getGraphics

();

//----水印图片不等于NULL,给图片添加水印

if

(

this

.

_waterMarker

!=

null

){

if

(

bufferedImage

.

getWidth

()

<

this

.

markerWidth

||

bufferedImage

.

getHeight

()

<

this

.

markerHeight

){

log

.

error

(

"图片小于水印图片大小!添加失败"

);

}

else

{

//---绘制水印

graphics2d

.

drawImage

(

this

.

_waterMarker

,

markerX

,

markerY

,

markerWidth

,

markerHeight

,

null

);

}

}

graphics2d

.

dispose

();

ImageIO

.

write

(

bufferedImage

,

getFileSuffix

(

_saveFile

),

_saveFile

);

}

//---测试

public

static

void

main

(

String

[]

args

)

{

try

{

ImgFactory

ifs

=

new

ImgFactory

(

"D:/1.png"

,

"D:/2.png"

);

ifs

.

setWaterMarker

(

"D:/3.png"

,

0

,

0

,

50

,

50

);

ifs

.

zoom

(

0.5f

,

false

);

System

.

out

.

println

(

"成功!!!"

);

}

catch

(

IOException

e

)

{

e

.

printStackTrace

();

}

}

}

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

java png 缩放_JAVA 图片的缩放,和压缩,PNG背景透明 的相关文章

  • C#添加配置文档基础

    程序编译后在日常使用中是无法更改固定参数的 如果需要更改里面的参数每次都要改动源代码这将变得非常麻烦 所以我们可以使用到配置文档 这里将介绍配置文档最基础的使用方法 1 新建一个App config文件 在项目中新建一个App config
  • DETR系列大盘点

    点击下方卡片 关注 自动驾驶之心 公众号 ADAS巨卷干货 即可获取 点击进入 自动驾驶之心 目标检测 技术交流群 后台回复 2D检测综述 获取鱼眼检测 实时检测 通用2D检测等近5年内所有综述 自从VIT横空出世以来 Transforme
  • cookie设置为关闭浏览器后清除,打开后cookie还是没有清除

    今天踩了几个cookie的坑 花了我2小时 问题是这样的 我给aaa域名下的a html页面设置了一条很简单的cookie document cookie name abc 这样设置后默认为关闭浏览器后清除该cookie 可是关闭后打开co
  • vue elementUI 之 this.$confirm 的使用

    当进行一些操作时 有时需要弹出一些确定信息 一般有两种形式 提示框和确认框 通常为一个确定动操作 一个取消操作 如下 this confirm 您确定删除吗 提示 confirmButtonText 确定 cancelButtonText
  • Windows 系统下常用的八个网络配置命令

    一 ipconfig ipconfig 是 Windows 网络中最常使用的命令 用于显示计算机中网络适配器的 IP 地址 子网掩码及默认网关等信息 命令基本格式 ipconfig all renew adapter release ada
  • Modbus RTU简介(上)

    1 前言 1 1 什麽是Modbus Modbus是一种用于工业控制的标准通信协议 它定义了装置之间在应用层的消息封装模式 沟通方法 沟通顺序 Modbus的优势 Modbus协议是开源免费的 Modbus支援多种常见工控接口 RS232
  • 服务器里修改登录密码,云服务器修改登录密码

    云服务器修改登录密码 内容精选 换一换 如果密码丢失 或创建时未设置密码 推荐您在控制台设置登录密码 如果密码丢失 或创建时未设置密码 推荐您在控制台设置登录密码 云服务器修改登录密码 相关内容 当云服务器密码即将过期 密码泄露或首次登录时
  • #关于pytorch和torchvision对应版本#

    pytorch和torchvision对应版本记录 进入pytorch官网查看历史版本 有对应信息pytorch历史版本 比如pytorch1 5 1对应torchvision0 6 1 CUDA 9 2 conda install pyt
  • LVGL v7 使用心得及工具分享

    1 v7与v8的区别 对于v7来说 并没有v8优化的那么全面和完善 有些好用的功能在v7中也并未实现 但这并不代表v7就不好 在稳定性和兼容性这方面v7做的比v8好很多 虽然现在大多数都能上v8 其次v7与v8是两个大版本变动 很多API都
  • SQLServer与MySQL的一些常用操作加字段、修改字段、重置自增ID

    SQLServer与MySQL的一些常用操作 总结一些SQLServer与MySQL的一些常用操作 添加字段 修改字段 重置自增ID 添加字段 SQLServer 在SQLServer中 我们可以使用ALTER TABLE命令来添加表字段
  • UE4 禁用引擎Runtime模式下的引擎内置按键

    本文内容主要讲解在开发过程中 不想用引擎自带的按键如何禁用它 这些按键类似于一个快捷键工具例如F1 F5之类的按键 但最终打包成发行版的项目会自动禁用这些按键 所以不用担心用户会误触这些按键 1 找到引擎目录下的BaseInput ini文
  • sql中的coalesce函数

    COALESCE函数是一个SQL中的标准函数 它用于返回多个表达式中的第一个非NULL值 它的通常用途是在查询中提供默认值以避免NULL值 COALESCE函数的语法如下 COALESCE expression1 expression2 e
  • Elementui的select怎么获取选中的对象

    今天在开发中碰到了这样一个问题 平常使用select只是获取到他的值就可以了 突然需要获取选中的对象 倒是一下有些无从下手 也看了一些别人的文章 基本都没有很清晰的指出方法 我在这里做一个备注
  • 网站服务器速度快取决于,建站经验 网站打开速度快慢的因素

    判断一个网站打开速度快或者是慢主要取决于以下一些因素 一 网页内容的大小 网页内容所包括的文本 产品的图片 静态的 动态的 视频 flash文件等 这里涉及到浏览器的原理 浏览器的技术原理就是将网页下载到客户本地缓存 然后通过浏览器解析源码
  • 网易2018校园招聘编程题真题集合 (部分)

    第一题 小易准备去魔法王国采购魔法神器 购买魔法神器需要使用魔法币 但是小易现在一枚魔法币都没有 但是小易有两台魔法机器可以通过投入x x可以为0 个魔法币产生更多的魔法币 魔法机器1 如果投入x个魔法币 魔法机器会将其变为2x 1个魔法币
  • hive报metadata.HiveException: Hive Runtime Error while processing row (tag=0)错误

    今天跑一条统计的SQL出现Caused by org apache hadoop hive ql metadata HiveException Hive Runtime Error while processing row tag 0 ke
  • android -------- AES加密解密算法

    AES加密标准又称为高级加密标准Rijndael加密法 是美国国家标准技术研究所NIST旨在取代DES的21世纪的加密标准 AES的基本要求是 采用对称分组密码体制 密钥长度可以为128 192或256位 分组长度128位 算法应易在各种硬
  • HTML5边玩边学(8):俄罗斯方块就是这么简单 之 数据模型篇

    HTML5边玩边学 8 俄罗斯方块就是这么简单 之 数据模型篇 特别提示 本文中的运行效果需要 Chrome 浏览器或者 Firefox 浏览器 一 从数据出发还是从界面出发 要写一个俄罗斯方块小游戏 我们先来一块考虑一下下面几个问题 1
  • 【运算符重载】日期类实战篇

    学习导航 一 任务清单 二 基本原则 三 功能实现 构造函数 两个对象间比大小 日期对象加减天数 1 加减运算符的重载 2 运算符的重载 3 与 之间的复用 4 前置 与后置加加 两个对象之间的日期差 流插入与流提取运算符的重载 一 任务清

随机推荐

  • 将 debian 安装到 虚拟机中,不需要官方虚拟 tools 的简单办法 (****)

    目录 将 debian 安装到 虚拟机中 不需要官方虚拟 tools 的简单办法 原版 衍生版 debian mxlinux 的一些区别 https blog csdn net ken2232 article details 1325311
  • 国产文档处理控件Spire.Doc WPS Word文档功能上线!快速创建Word指南

    Spire Doc for Java 是一款专业的Java Word组件 开发人员使用它可以轻松地将Word文档创建 读取 编辑 转换和打印等功能集成到自己的Java应用程序中 本文将介绍如何使用Spire Doc for Java加载 操
  • c语言宏定义放置位置,c语言宏定义详解

    1 防止一个头文件被重复包含 ifndefCOMDEF H define COMDEF H 头文件内容 endif2 重新定义一些类型 防止由于各种平台和编译器的不同 而产生的类型字节数 差异 方便移植 typedef unsigned c
  • 使用quagga/zebra的OSPF实验

    报错处理案例 下面是启动zebra的异常 启动ospf的异常也以同样的方式处理 注意 将下面的zebra换乘ospf即可 可进入相应文件夹下查看文件具体名称 Ubuntu下安装Wireshark 添加wireshark的源 sudo apt
  • PFC电路

    一 前言 PFC分无源和有源 无源PFC 也称被动式PFC 有源PFC 也称主动式PFC 无源PFC一般采用电感补偿方法使交流输入的基波电流与电压之间相位差减小来提高功率因数 但无源PFC的功率因数不是很高 只能达到0 7 0 8 有源PF
  • 蓝桥杯真题——组素数——python解析

    素数就是不能再进行等分的数 比如 2 3 5 7 11 等 9 3 3 说明它可以3等分 因而不是素数 我们国家在1949年建国 如果只给你 1 9 4 9 这4个数字卡片 可以随意摆放它们的先后顺序 但卡片不能倒着摆放啊 我们不是在脑筋急
  • 使用JSP完成cookie记住用户名和密码

    2019 10 11 JSP笔记 使用JSP完成cookie记住用户名密码
  • 布局资源(layout)的简单使用

    随时随地阅读更多技术实战干货 获取项目源码 学习资料 请关注源代码社区公众号 ydmsq666 布局资源是Android中最常用的一种资源 Android可以将屏幕中组件的布局方式定义在一个XML中 这有点像Web开发中的HTML页面 我们
  • 深入理解Hadoop YARN中的Container概念

    在学习Hadoop YARN Hadoop 2 0新引入的通用资源管理系统过程中 总会遇到Container这一概念 由于中文资料的缺乏 很多人对Container这一概念仍非常的模糊 它与Linux Container是什么关系 它是否能
  • 第一次开博,转一下《没有风投的创业法则》

    有人曾经对我说 一个创业者得到风险投资的几率如同在一个晴天下站在游泳池里被闪电击中一样 但是在我看来 这种比喻还是过于乐观了 在现在这个热钱涌动的商业 社会 好的 企业 从来不缺投资 当然前提必须是这是一家优秀的企业 至少也得是看起来有前途
  • shell 字符串处理汇总

    http blog chinaunix net uid 124706 id 3475936 html 字符串 简称 串 有限字符的序列 数据元素为字符的线性表 是一种数据的逻辑结构 在计算机中可有不同的存储结构 在串上可进行求子串 插入字符
  • vue js vue实现前端模糊匹配搜索,借助js自带的filter方法和正则表达式筛选所需元素

    vue js vue实现前端模糊匹配搜索 借助js自带的filter方法和正则表达式筛选所需元素 参考 vue实现的前端模糊匹配搜索 js 查找特定字符 模糊查询 不区分大小写
  • 二级菜单打开一个时其他关闭_blender2.8教程 顶部菜单栏

    顶栏 菜单 程序菜单 启动画面 打开 启动画面 支持Blender 开发筹资 打开开发基金网站 Blender商店 打开Blender商店 关于 发布说明 打开最新发布说明 Blender官网 打开Blender官网 贡献者名单 打开贡献者
  • 微信小程序开发 Request Headers: Provisional headers are shown

    在微信小程序开发的时候 写了两个API请求 请求A 请求A wx request url https wx baidu com api wx getBallByDate method POST dataType json data date
  • shrio验证cookie有效性

    shrio验证cookie有效性 概述 shrio中提供cookie管理的功能 当用户选择了rememberMe 则下次不需要再登录 而是直接通过本地记录的cookie进行验证 然后就可以访问权限为user的页面 问题 shiro提供清除用
  • 数据表的基础操作(五)数据的修改

    文章目录 修改数据 UPDATE 一 修改有数据 实例1 二 修改指定数据 实例2 修改数据 UPDATE 随着时间的推移和数据的更新 所以我们要对表存储的数据进行修改 一 修改有数据 语法 UPDATE 表名 SET 字段1 数据1 字段
  • Super超级ERP系统---(8)订单管理--订单创建

    订单管理是ERP系统中一个重要模块 客户下订单 ERP通过订单来为客户进行配送 订单模块主要包括订单创建 订单修改 订单审核 订单取消 订单分配 订单打印 订单拣货 订单出库 在随后的几节里我们看看这些每个模块是怎么设计运行的 1 订单创建
  • 微软语音合成 报错 Handler dispatch failed; nested exception is java.lang.UnsatisfiedLinkError: com.microsoft

    查找文档 发现操作系统问题 centos某个版本有问题 换成其他操作系统就好了
  • STM32 的ADC解析

    在嵌入式系统中 被测控的对象 如温度 压力 流量 速度 电压等 都是连续变化的物理量 这种连续变化的物理量通常被称为模拟量 当计算机参与测控时 计算机处理的信号是数字量 数字量指的是时间和数字上都离散的量 能将模拟量转换为数字量的器件称为模
  • java png 缩放_JAVA 图片的缩放,和压缩,PNG背景透明

    public class ImgFactory private Logger log LoggerFactory getLogger ImgFactory class private File saveFile private Buffer