java图片压缩比为1

Python012

java图片压缩比为1,第1张

java压缩图片,按照比例进行压缩

public static void main(String[] args) {

try {

//图片所在路径

BufferedImage templateImage = ImageIO.read(new File("C:\\Users\\晏丁丁\\Pictures\\图片1.png"))

//原始图片的长度和宽度

int height = templateImage.getHeight()

int width = templateImage.getWidth()

//通过比例压缩

float scale = 0.5f

//通过固定长度压缩

/*int doWithHeight = 100

int dowithWidth = 300*/

//压缩之后的长度和宽度

int doWithHeight = (int) (scale * height)

int dowithWidth = (int) (scale * width)

BufferedImage finalImage = new BufferedImage(dowithWidth, doWithHeight, BufferedImage.TYPE_INT_RGB)

finalImage.getGraphics().drawImage(templateImage.getScaledInstance(dowithWidth, doWithHeight, java.awt.Image.SCALE_SMOOTH), 0, 0, null)

//图片输出路径,以及图片名

FileOutputStream fileOutputStream = new FileOutputStream("D:/image/tupian.jpg")

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fileOutputStream)

encoder.encode(finalImage)

fileOutputStream.close()

} catch (IOException e) {

e.printStackTrace()

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

文章知

您转换的是图片的后缀名吧?您这样的方式已经把图片的信息删除了!

http://sjbbs.zol.com.cn/1/313_9068.html您去下载一个java图片压缩器吧

或者直接在Java下编辑代码来实习转换

package com.sun.util.cyw

import java.awt.Image

import java.awt.image.BufferedImage

import java.io.File

import java.io.FileNotFoundException

import java.io.FileOutputStream

import java.io.IOException

import javax.imageio.ImageIO

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

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

/**

* 图片工具类

* 压缩图片大小

* @author Cyw

* @version 1.0

*/

public class ZIPImage {

private File file = null

private String outPutFilePath

private String inPutFilePath

private String inPutFileName

private boolean autoBuildFileName

private String outPutFileName

private int outPutFileWidth = 100// 默认输出图片宽

private int outPutFileHeight = 100// 默认输出图片高

private static boolean isScaleZoom = true// 是否按比例缩放

public ZIPImage() {

outPutFilePath = ""

inPutFilePath = ""

inPutFileName = ""

autoBuildFileName = true

outPutFileName = ""

}

/**

*

* @param ipfp

*源文件夹路径

* @param ipfn

*源文件名

* @param opfp

*目标文件路径

* @param opfn

*目标文件名

*/

public ZIPImage(String ipfp, String ipfn, String opfp, String opfn) {

outPutFilePath = opfp

inPutFilePath = ipfp

inPutFileName = ipfn

autoBuildFileName = true

outPutFileName = opfn

}

/**

*

* @param ipfp

*源文件夹路径

* @param ipfn

*源文件名

* @param opfp

*目标文件路径

* @param opfn

*目标文件名

* @param aBFN

*是否自动生成目标文件名

*/

public ZIPImage(String ipfp, String ipfn, String opfp, String opfn,

boolean aBFN) {

outPutFilePath = opfp

inPutFilePath = ipfp

inPutFileName = ipfn

autoBuildFileName = aBFN

outPutFileName = opfn

}

public boolean isAutoBuildFileName() {

return autoBuildFileName

}

public void setAutoBuildFileName(boolean autoBuildFileName) {

this.autoBuildFileName = autoBuildFileName

}

public String getInPutFilePath() {

return inPutFilePath

}

public void setInPutFilePath(String inPutFilePath) {

this.inPutFilePath = inPutFilePath

}

public String getOutPutFileName() {

return outPutFileName

}

public void setOutPutFileName(String outPutFileName) {

this.outPutFileName = outPutFileName

}

public String getOutPutFilePath() {

return outPutFilePath

}

public void setOutPutFilePath(String outPutFilePath) {

this.outPutFilePath = outPutFilePath

}

public int getOutPutFileHeight() {

return outPutFileHeight

}

public void setOutPutFileHeight(int outPutFileHeight) {

this.outPutFileHeight = outPutFileHeight

}

public int getOutPutFileWidth() {

return outPutFileWidth

}

public void setOutPutFileWidth(int outPutFileWidth) {

this.outPutFileWidth = outPutFileWidth

}

public boolean isScaleZoom() {

return isScaleZoom

}

public void setScaleZoom(boolean isScaleZoom) {

this.isScaleZoom = isScaleZoom

}

public String getInPutFileName() {

return inPutFileName

}

public void setInPutFileName(String inPutFileName) {

this.inPutFileName = inPutFileName

}

/**

* 压缩图片大小

*

* @return boolean

*/

public boolean compressImage() {

boolean flag = false

try {

if (inPutFilePath.trim().equals("")) {

throw new NullPointerException("源文件夹路径不存在。")

}

if (inPutFileName.trim().equals("")) {

throw new NullPointerException("图片文件路径不存在。")

}

if (outPutFilePath.trim().equals("")) {

throw new NullPointerException("目标文件夹路径地址为空。")

} else {

if (!ZIPImage.mddir(outPutFilePath)) {

throw new FileNotFoundException(outPutFilePath

+ " 文件夹创建失败!")

}

}

if (this.autoBuildFileName) { // 自动生成文件名

String tempFile[] = getFileNameAndExtName(inPutFileName)

outPutFileName = tempFile[0] + "_cyw." + tempFile[1]

compressPic()

} else {

if (outPutFileName.trim().equals("")) {

throw new NullPointerException("目标文件名为空。")

}

compressPic()

}

} catch (Exception e) {

flag = false

e.printStackTrace()

return flag

}

return flag

}

// 图片处理

private void compressPic() throws Exception {

try {

// 获得源文件

file = new File(inPutFilePath + inPutFileName)

if (!file.exists()) {

throw new FileNotFoundException(inPutFilePath + inPutFileName

+ " 文件不存在!")

}

Image img = ImageIO.read(file)

// 判断图片格式是否正确

if (img.getWidth(null) == -1) {

throw new Exception("文件不可读!")

} else {

int newWidth

int newHeight

// 判断是否是等比缩放

if (ZIPImage.isScaleZoom == true) {

// 为等比缩放计算输出的图片宽度及高度

double rate1 = ((double) img.getWidth(null))

/ (double) outPutFileWidth + 0.1

double rate2 = ((double) img.getHeight(null))

/ (double) outPutFileHeight + 0.1

// 根据缩放比率大的进行缩放控制

double rate = rate1 >rate2 ? rate1 : rate2

newWidth = (int) (((double) img.getWidth(null)) / rate)

newHeight = (int) (((double) img.getHeight(null)) / rate)

} else {

newWidth = outPutFileWidth// 输出的图片宽度

newHeight = outPutFileHeight// 输出的图片高度

}

BufferedImage tag = new BufferedImage((int) newWidth,

(int) newHeight, BufferedImage.TYPE_INT_RGB)

/*

* Image.SCALE_SMOOTH 的缩略算法 生成缩略图片的平滑度的 优先级比速度高 生成的图片质量比较好 但速度慢

*/

tag.getGraphics().drawImage(

img.getScaledInstance(newWidth, newHeight,

Image.SCALE_SMOOTH), 0, 0, null)

FileOutputStream out = new FileOutputStream(outPutFilePath

+ outPutFileName)

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out)

encoder.encode(tag)

out.close()

}

} catch (IOException ex) {

ex.printStackTrace()

}

}

/**

* 创建文件夹目录

*

* @param filePath

* @return

* @throws Exception

*/

@SuppressWarnings("unused")

private static boolean mddir(String filePath) throws Exception {

boolean flag = false

File f = new File(filePath)

if (!f.exists()) {

flag = f.mkdirs()

} else {

flag = true

}

return flag

}

/**

* 获得文件名和扩展名

*

* @param fullFileName

* @return

* @throws Exception

*/

private String[] getFileNameAndExtName(String fullFileName)

throws Exception {

String[] fileNames = new String[2]

if (fullFileName.indexOf(".") == -1) {

throw new Exception("源文件名不正确!")

} else {

fileNames[0] = fullFileName.substring(0, fullFileName

.lastIndexOf("."))

fileNames[1] = fullFileName

.substring(fullFileName.lastIndexOf(".") + 1)

}

return fileNames

}

public Image getSourceImage() throws IOException{

//获得源文件

file = new File(inPutFilePath + inPutFileName)

if (!file.exists()) {

throw new FileNotFoundException(inPutFilePath + inPutFileName

+ " 文件不存在!")

}

Image img = ImageIO.read(file)

return img

}

/*

* 获得图片大小

* @path :图片路径

*/

public long getPicSize(String path) {

File file = new File(path)

return file.length()

}

}

//下面是测试程序

package com.sun.util.cyw

import java.awt.Image

import java.io.IOException

public class ImageTest {

public static void main(String[] args) throws IOException {

ZIPImage zip=new ZIPImage("d:\\","1.jpg","d:\\test\\","处理后的图片.jpg",false)

zip.setOutPutFileWidth(1000)

zip.setOutPutFileHeight(1000)

Image image=zip.getSourceImage()

long size=zip.getPicSize("d:\\1.jpg")

System.out.println("处理前的图片大小 width:"+image.getWidth(null))

System.out.println("处理前的图片大小 height:"+image.getHeight(null))

System.out.println("处理前的图片容量:"+ size +" bit")

zip.compressImage()

}

}

PNG是指便携式网络图形,是一种无损压缩的图片格式。其设计目的是试图替代GIF和TIFF文件格式,同时增加一些GIF文件格式所不具备的特性。PNG压缩比高,生成文件体积小,一般应用于JAVA程序、网页或S60程序中。

探究的一般过程是从发现问题、提出问题开始的,发现问题后,根据自己已有的知识和生活经验对问题的答案作出假设.设计探究的方案,包括选择材料、设计方法步骤等.按照探究方案进行探究,得到结果,再分析所得的结果与假设是否相符,从而得出结论.并不是所有的问题都一次探究得到正确的结论.有时,由于探究的方法不够完善,也可能得出错误的结论.因此,在得出结论后,还需要对整个探究过程进行反思.探究实验的一般方法步骤:提出问题、做出假设、制定计划、实施计划、得出结论、表达和交流.

科学探究常用的方法有观察法、实验法、调查法和资料分析法等.

观察是科学探究的一种基本方法.科学观察可以直接用肉眼,也可以借助放大镜、显微镜等仪器,或利用照相机、录像机、摄像机等工具,有时还需要测量.科学的观察要有明确的目的;观察时要全面、细致、实事求是,并及时记录下来;要有计划、要耐心;要积极思考,及时记录;要交流看法、进行讨论.实验方案的设计要紧紧围绕提出的问题和假设来进行.在研究一种条件对研究对象的影响时,所进行的除了这种条件不同外,其它条件都相同的实验,叫做对照实验.一般步骤:发现并提出问题;收集与问题相关的信息;作出假设;设计实验方案;实施实验并记录;分析实验现象;得出结论.调查是科学探究的常用方法之一.调查时首先要明确调查目的和调查对象,制订合理的调查方案.调查过程中有时因为调查的范围很大,就要选取一部分调查对象作为样本.调查过程中要如实记录.对调查的结果要进行整理和分析,有时要用数学方法进行统计.收集和分析资料也是科学探究的常用方法之一.收集资料的途径有多种.去图书管查阅书刊报纸,拜访有关人士,上网收索.其中资料的形式包括文字、图片、数据以及音像资料等.对获得的资料要进行整理和分析,从中寻找答案。