当前位置: 首页 > 编程日记 > 正文

JAVA图片处理--缩放,切割,类型转换

import java.io.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.Graphics;
import java.awt.color.ColorSpace;
import javax.imageio.ImageIO;public class ChangeImageSize
{/** *//*** 缩放图像* @param srcImageFile 源图像文件地址* @param result       缩放后的图像地址* @param scale        缩放比例* @param flag         缩放选择:true 放大; false 缩小;*/public static void scale(String srcImageFile, String result, int scale, boolean flag){try{BufferedImage src = ImageIO.read(new File(srcImageFile)); // 读入文件int width = src.getWidth(); // 得到源图宽int height = src.getHeight(); // 得到源图长if (flag){// 放大width = width * scale;height = height * scale;}else{// 缩小width = width / scale;height = height / scale;}Image image = src.getScaledInstance(width, height, Image.SCALE_DEFAULT);BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);Graphics g = tag.getGraphics();g.drawImage(image, 0, 0, null); // 绘制缩小后的图
            g.dispose();ImageIO.write(tag, "JPEG", new File(result));// 输出到文件流
        }catch (IOException e){e.printStackTrace();}}/** *//*** 图像切割* @param srcImageFile 源图像地址* @param descDir      切片目标文件夹* @param destWidth    目标切片宽度* @param destHeight   目标切片高度*/public static void cut(String srcImageFile, String descDir, int destWidth, int destHeight){try{Image img;ImageFilter cropFilter;// 读取源图像BufferedImage bi = ImageIO.read(new File(srcImageFile));int srcWidth = bi.getHeight(); // 源图宽度int srcHeight = bi.getWidth(); // 源图高度if (srcWidth > destWidth && srcHeight > destHeight){Image image = bi.getScaledInstance(srcWidth, srcHeight, Image.SCALE_DEFAULT);destWidth = 200; // 切片宽度destHeight = 150; // 切片高度int cols = 0; // 切片横向数量int rows = 0; // 切片纵向数量// 计算切片的横向和纵向数量if (srcWidth % destWidth == 0){cols = srcWidth / destWidth;}else{cols = (int) Math.floor(srcWidth / destWidth) + 1;}if (srcHeight % destHeight == 0){rows = srcHeight / destHeight;}else{rows = (int) Math.floor(srcHeight / destHeight) + 1;}// 循环建立切片// 改进的想法:是否可用多线程加快切割速度for (int i = 0; i < rows; i++){for (int j = 0; j < cols; j++){// 四个参数分别为图像起点坐标和宽高// 即: CropImageFilter(int x,int y,int width,int height)cropFilter = new CropImageFilter(j * 200, i * 150, destWidth, destHeight);img = Toolkit.getDefaultToolkit(), .createImage(new FilteredImageSource(image.getSource(), cropFilter));BufferedImage tag = new BufferedImage(destWidth, destHeight, BufferedImage.TYPE_INT_RGB);Graphics g = tag.getGraphics();g.drawImage(img, 0, 0, null); // 绘制缩小后的图
                        g.dispose();// 输出为文件ImageIO.write(tag, "JPEG", new File(descDir + "pre_map_" + i + "_" + j + ".jpg"));}}}}catch (Exception e){e.printStackTrace();}}/** *//*** 图像类型转换 GIF->JPG GIF->PNG PNG->JPG PNG->GIF(X)*/public static void convert(String source, String result){try{File f = new File(source);f.canRead();f.canWrite();BufferedImage src = ImageIO.read(f);ImageIO.write(src, "JPG", new File(result));}catch (Exception e){// TODO Auto-generated catch block
            e.printStackTrace();}}/** *//*** 彩色转为黑白* @param source* @param result*/public static void gray(String source, String result){try{BufferedImage src = ImageIO.read(new File(source));ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY);ColorConvertOp op = new ColorConvertOp(cs, null);src = op.filter(src, null);ImageIO.write(src, "JPEG", new File(result));}catch (IOException e){e.printStackTrace();}}/** *//*** @param args*/public static void main(String[] args){scale("D:\100CASIO\CIMG0001.JPG","C:\Documents and Settings\ibm\桌面\image.jpg",10,false);}}

文章转自:http://www.cnblogs.com/chinaqiao/archive/2009/06/04/1496170.html

转载于:https://www.cnblogs.com/dreammyle/p/3992983.html

相关文章:

文本框自动提示_Excel办公小技巧,使用艺术字与文本框,就是那么的简单

Excel中的艺术字同时拥有文字和图形两种对象的属性&#xff0c;不仅可以修改其中的内容&#xff0c;还可以调整形状的大小、设置边框以及内部填充等效果&#xff0c;常在编辑表格标题或者输入一些比较有提示性的文本时使用&#xff0c;在突出关键内容的同时美化表格效果添加艺术…

Linux之父盟友分道扬镳 直言开源模式软肋

Linux之父盟友分道扬镳 直言开源模式软肋2005-09-06 12:53:00标签&#xff1a;linux职场开源休闲从1993年起&#xff0c;Larry McVoy就一直是Linux之父Linus Torvalds最忠实的盟友之一。 然而经历了这些年后&#xff0c;McVoy开始相信&#xff0c;开源这种风靡一时、纷纷被…

身份证第18位计算

本文计算方式源自 百度百科&#xff0c;根据计算方式&#xff0c;Java计算代码如下文所示。 计算方法 1、将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为&#xff1a;7&#xff0d;9&#xff0d;10&#xff0d;5&#xff0d;8&#xff0d;4&…

归并排序 算法

算法思路 将一个数列不断拆分为子序列&#xff0c;直到只剩下0或者1个元素再将子序列按顺序合并为原来数列的大小&#xff0c;完成排序 代码实现 //合并两个有序数组 vector<int> merge_two_sort(vector<int> &arr1, vector<int> &arr2) {vector&…

DRBD配置参数

用户手册&#xff1a;http://www.drbd.org/users-guide语法及详解参数&#xff1a;http://www.drbd.org/users-guide-emb/re-drbdconf.html官方示例&#xff1a;http://www.drbd.org/users-guidedrbd及其配置文件中的相关名词&#xff1a; failover&#xff1a;失效转移。通俗地…

两个苹果手机怎么传通讯录_苹果手机通讯录丢失怎么恢复?货真价实的通讯录恢复技巧...

苹果手机如果只是误删了某个好友的联系方式&#xff0c;完全可以通过其他共同好友要到联系方式&#xff0c;重新添加回手机。如果没有共同好友&#xff0c;或者将手机通讯录所有联系人丢失或误删&#xff0c;该怎么办呢&#xff1f;今天小编就教大家几种找回误删通讯录联系人的…

工作5年才有自己博客...汗...

工作5年才有自己博客...汗...转载于:https://www.cnblogs.com/zx19821107/p/3189640.html

Codeforces Round #539 (Div. 2) C. Sasha and a Bit of Relax

链接&#xff1a;https://codeforces.com/problemset/problem/1113/C 题意&#xff1a;长度为n的序列 &#xff0c;若l&#xff0c;r满足&#xff0c;则称这对l&#xff0c;r为funny&#xff0c;其中mid&#xff08;r-l&#xff09;/2 求出共有几对funny 思路&#xff1a;上式等…

计数排序 算法

算法思路 统计待排序数列中每个数字出现的次数入数据结构的过程其实就是排序的过程最后再按照统计结果覆盖原序列就行了 PS: 前提条件是知道排序元素的范围 算法实现 void count(vector<int> &arr, int range) {vector<int> count(range1,0);for (int i 0…

Unity3D中的函数方法及解释

一、刷新函数 Update 当MonoBehaviour启用时&#xff0c;其Update在每一帧被调用。 LateUpdate 当Behaviour启用时&#xff0c;其LateUpdate在每一帧被调用。 FixedUpdate 当MonoBehaviour启用时&#xff0c;其 固定时间调用一次 二、启动函数 Awake 当一个脚本实例被载入时Awa…

asio boost 异步错误处理_boost::ASIO的同步方式和异步方式

http://blog.csdn.net/zhuky/article/details/5364574http://blog.csdn.net/zhuky/article/details/5364685Boost.Asio是一个跨平台的网络及底层IO的C编程库&#xff0c;它使用现代C手法实现了统一的异步调用模型。头文件#include 名空间using namespace boost::asio;ASIO库能够…

对Linux文件中的多行进行注释

1.讲文件中的所有行进行注释:1,$s/^/# 当然某些文件的注释不是“#”&#xff0c;你把“#”换成注释符就行了c2.对某些段进行注释&#xff1a;set nu 查看所有注释的段&#xff0c;比如发现要注释的第250到380&#xff1a;250…

利用反射对应数据库字段

#region DataSet数据读取protected delegate P GetDataSetItemHandler<P>(DataRow row);internal static T GetItem(DataRow dr){T item new T();DataTableAttribute tableAttribute DataEntity.GetTableAttribute<T>();if (tableAttribute ! null){for (int i …

多线程:pthread_cond_wait 实现原理

函数原型 int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex) 第一个参数为需要等待的条件&#xff0c;第二个参数为互斥锁 一般该函数和 int pthread_cond_signal(pthread_cond_t *cond);函数一同使用&#xff0c;用来唤醒在cond条件上等待且处于就绪队列…

标头“Vary:Accept-Encoding”指定方法及其重要性分析

原文地址&#xff1a;http://www.webkaka.com/blog/archives/how-to-set-Vary-Accept-Encoding-header.html 在webkaka的网站速度诊断性能优化里有一项叫指定“Vary:Accept-Encoding”标头&#xff0c;可能很多人不太明白这是什么意思&#xff0c;不知道它对网站的影响有多大&a…

protobufjs 命令执行_【原码笔记】-- protobuf.js 与 Long.js

protobuf.js的结构和webpack的加载之后的结构很相似。这样的模块化组合是个不错的结构方式。1个是适应了不同的加载方式&#xff0c;2个模块直接很独立。webpack的功能更全一点。但如果自己封装js库这样够用了。而且模块对外统一接口 module.exports。这和node很像。(function(…

IBM X3550 RAID 扩容实例

背景&#xff1a;系统更新&#xff0c;原服务器容量不足&#xff0c;原服务器硬盘配置如下&#xff1a;2块146G 10K SAS 硬盘组成的RAID 1&#xff0c;咨询供应商&#xff0c;原来的硬盘已停产&#xff0c;现只有直接上两块新的盘增加一个RAID 1 实现扩容&#xff0c;增加两块3…

react取消监听scroll事件

如果要移除事件addEventListener的执行函数必须使用外部函数而不能直接使用匿名函数 错误写法&#xff1a; // 这样写是移除不了滚动事件的 componentDidMount() {// 添加滚动监听window.addEventListener(scroll, ()>{console.log("滚动距离&#xff1a;",window…

ceph存储 PG的状态机 源码分析

文章目录PG 的状态机和peering过程1. PG 状态机变化的时机2. pg的状态演化过程3. pg状态变化实例讲解3.1 pg状态的管理结构3.2 数据的pg状态变化过程3.2.1 NULL -> initial3.2.2 initial -> reset -> Started3.2.3 Started(start) ->Started( primary(Peering(GetI…

JDBC连接MySQL数据库及演示样例

JDBC是Sun公司制定的一个能够用Java语言连接数据库的技术。 一、JDBC基础知识 JDBC&#xff08;Java Data Base Connectivity,java数据库连接&#xff09;是一种用于执行SQL语句的Java API&#xff0c;能够为多种关系数据库提供统一訪问&#xff0c;它由一组用Java语言…

Linux从mysql中读取数据_linux shell中读写操作mysql数据库

本文介绍了如何在shell中读写mysql数据库。主要介绍了如何在shell 中连接mysql数据库&#xff0c;如何在shell中创建数据库&#xff0c;创建表&#xff0c;插入csv文件&#xff0c;读取mysql数据库&#xff0c;导出mysql数据库为xml或html文件&#xff0c; 并分析了核心语句。本…

算法系列之二十:计算中国农历(二)

&#xff08;接上篇&#xff09; 所谓的“天文算法”&#xff0c;就是利用经典力学定律推导行星运转轨道&#xff0c;对任意时刻的行星位置进行精确计算&#xff0c;从而获得某种天文现象发生时的时间&#xff0c;比如日月合朔这一天文现象就是太阳和月亮的地心黄经&#xff08…

如何限制只有某些IP才能使用Tomcat Manager

只有指定的主机或IP地址才可以访问部署在Tomcat下的应用。Tomcat提供了两个参数供你配置&#xff1a;RemoteHostValve 和RemoteAddrValve&#xff0c;前者用于限制主机名&#xff0c;后者用于限制IP地址。 通过配置这两个参数&#xff0c;可以让你过滤来自请求的主机或IP地址&a…

leetcode-24 两两交换链表中的节点

题目描述 给定一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后的链表。 你不能只是单纯的改变节点内部的值&#xff0c;而是需要实际的进行节点交换。 示例: 给定 1->2->3->4, 你应该返回 2->1->4->3. 方法一&#xff08;递归&#x…

TimeQuest学习之三------外部寄存器模型

clock skew < destination reg clock delay > - < source reg clock delay > 为了使clock skew 的影响可以叠加到data delay上&#xff0c;给出如下三组公式&#xff08;对于fpga2ic&#xff09;&#xff1a; 1.clock skew <ext_clk delay> - < fpga_cl…

linux mysql远程链接_Linux下mysql实现远程连接

首先明白一点并不是mysql禁止远程连接&#xff0c;而是MYSQL的账号禁止远程连接。可能觉得我有点咬文嚼字了&#xff0c;不过我感觉分清这点还是很重要的。默认情况下&#xff0c;所有账号都是禁止远程连接的。在安装MYSQL的时候&#xff0c;在设置ROOT密码那里有一个CHECKBOX&…

H5 客户端设置title 滑动验证码

转载于:https://www.cnblogs.com/Airoocle/p/10420140.html

leetcode-2 两数相加

给出两个 非空 的链表用来表示两个非负的整数。其中&#xff0c;它们各自的位数是按照 逆序 的方式存储的&#xff0c;并且它们的每个节点只能存储 一位 数字。 如果&#xff0c;我们将这两个数相加起来&#xff0c;则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0…

spring-注解

spring框架提供xml文件的配置&#xff0c;也提供基于注解的方式实现配置任何的Bean实例&#xff0c;目前&#xff0c;struts2、hibernate和spring都相继支持基于注解的实现方式。spring要求程序员指定搜索哪些路径下的java类&#xff0c;spring会把合适的java类全部注册成sprin…

mysql raw_Oracle中的Raw类型解释

RAW&#xff0c;类似于CHAR&#xff0c;声明方式RAW(L)&#xff0c;L为长度&#xff0c;以字节为单位&#xff0c;作为数据库列最大2000&#xff0c;作为变量最大32767字节。 LONG RAW&#xff0c;类似于LORAW&#xff0c;类似于CHAR&#xff0c;声明方式RAW(L)&#xff0c;L为…