ตัวอย่างในบทความนี้อธิบายวิธีการสร้างภาพขนาดย่อและอัตราส่วนภาพใน Java แบ่งปันกับทุกคนสำหรับการอ้างอิงของคุณ วิธีการดำเนินการเฉพาะมีดังนี้:
อินสแตนซ์นี้รองรับการปรับขนาดความกว้างและความสูงของรูปภาพให้เป็นความกว้างและความสูงที่ระบุ และบันทึกลงในไดเร็กทอรีที่ระบุ อัตราการลดขนาดรูปภาพจะคำนวณตามขนาดของวัตถุเป้าหมายและขนาดมาตรฐาน (ที่ระบุ) สามารถตั้งค่าคุณภาพการปรับขนาดได้ และคุณภาพการปรับขนาดภาพสามารถตั้งค่าได้ตามที่กำหนด ปรับขนาดภาพเป็นความกว้างและความสูง
รหัสเฉพาะมีดังนี้:
คัดลอกรหัสรหัสดังต่อไปนี้:
แพ็คเกจ com.hoo.util;
นำเข้า java.awt.Image;
นำเข้า java.awt.image.BufferedImage;
นำเข้า java.io.File;
นำเข้า java.io.FileOutputStream;
นำเข้า java.io.IOException;
นำเข้า java.net.MalformedURLException;
นำเข้า java.net.URL;
นำเข้า javax.imageio.ImageIO;
นำเข้า com.sun.image.codec.jpeg.ImageFormatException;
นำเข้า com.sun.image.codec.jpeg.JPEGCodec;
นำเข้า com.sun.image.codec.jpeg.JPEGEncodeParam;
นำเข้า com.sun.image.codec.jpeg.JPEGImageEncoder;
-
* <b>ฟังก์ชั่น:</b> คลาสเครื่องมือซูมภาพ สร้างภาพขนาดย่อ ยืดสัดส่วนภาพ
*@authorhoojo
* @createDate 2012-2-3 10:08:47 น
* @ไฟล์ ScaleImageUtils.java
* @package com.hoo.util
* @เวอร์ชั่น 1.0
-
ScaleImageUtils คลาสนามธรรมสาธารณะ {
โฟลตสุดท้ายแบบคงที่ส่วนตัว DEFAULT_SCALE_QUALITY = 1f;
สตริงสุดท้ายแบบคงที่ส่วนตัว DEFAULT_IMAGE_FORMAT = ".jpg"; // รูปแบบไฟล์รูปภาพ
สตริงสุดท้ายคงที่ส่วนตัว DEFAULT_FILE_PATH = "C:/temp-";
-
* <b>ฟังก์ชั่น:</b> ตั้งค่าระดับการแจงนับคุณภาพการบีบอัดภาพ;
* หลักเกณฑ์บางประการ: คุณภาพสูง 0.75, คุณภาพปานกลาง 0.5, คุณภาพต่ำ 0.25
*@authorhoojo
* @createDate 2012-2-7 11:31:45 น
* @ไฟล์ ScaleImageUtils.java
* @package com.hoo.util
* @โครงการ JQueryMobile
* @เวอร์ชั่น 1.0
-
ImageQuality สาธารณะ enum {
สูงสุด(1.0f), สูง(0.75f), ปานกลาง(0.5f), ต่ำ(0.25f);
คุณภาพโฟลตส่วนตัว
getQuality โฟลตสาธารณะ () {
ส่งคืนสิ่งนี้คุณภาพ;
-
คุณภาพของภาพ (คุณภาพโฟลต) {
this.quality = คุณภาพ;
-
-
รูปภาพภาพนิ่งส่วนตัว
-
* <b>ฟังก์ชัน:</b> คำนวณอัตราส่วนการลดขนาดภาพตามขนาดของวัตถุเป้าหมายและขนาดมาตรฐาน (ระบุ)
*@authorhoojo
* @createDate 2012-2-6 04:41:48 น
* @param targetWidth ความกว้างของเป้าหมาย
* @param targetHeight ความสูงของเป้าหมาย
* @param standardWidth ความกว้างมาตรฐาน (ระบุ)
* @param standardHeight ความสูงมาตรฐาน (ระบุ)
* @return อัตราส่วนที่เหมาะสมน้อยที่สุด
-
getScaling คู่แบบคงที่สาธารณะ (double targetWidth, double targetHeight, double standardWidth, double standardHeight) {
ความกว้างสองเท่ามาตราส่วน = 0d;
ความสูงสองเท่ามาตราส่วน = 0d;
ถ้า (targetWidth > ความกว้างมาตรฐาน) {
widthScaling = ความกว้างมาตรฐาน / (ความกว้างเป้าหมาย * 1.00d);
} อื่น {
ความกว้างสเกล = 1d;
-
ถ้า (targetHeight > standardHeight) {
ความสูงมาตราส่วน = ความสูงมาตรฐาน / (ความสูงเป้าหมาย * 1.00d);
} อื่น {
ความสูงมาตราส่วน = 1d;
-
กลับ Math.min (widthScaling, heightScaling);
-
-
* <b>ฟังก์ชัน:</b> ปรับขนาดความกว้างและความสูงของรูปภาพให้เป็นความกว้างและความสูงที่ระบุ และบันทึกไว้ในไดเร็กทอรี savePath
*@authorhoojo
* @createDate 2012-2-6 16:54:35 น
* @param width ความกว้างของการปรับขนาด
* @param ความสูงการซูมความสูง
* @param savePath บันทึกไดเร็กทอรี
* @param targetImage รูปภาพเป้าหมายที่จะซูม
* @return เส้นทางและชื่อการบันทึกรูปภาพ
* @ พ่น ImageFormatException
* @throwsIOException
-
การปรับขนาดสตริงคงที่สาธารณะ (ความกว้าง int, ความสูง int, สตริง savePath, รูปภาพ targetImage) พ่น ImageFormatException, IOException {
ความกว้าง = Math.max (ความกว้าง 1);
ความสูง = Math.max (ความสูง, 1);
รูปภาพ BufferedImage = BufferedImage ใหม่ (ความกว้าง, ความสูง, BufferedImage.TYPE_INT_RGB);
image.getGraphics().drawImage(targetImage, 0, 0, ความกว้าง, ความสูง, null);
ถ้า (savePath == null || "".equals (savePath)) {
savePath = DEFAULT_FILE_PATH + System.currentTimeMillis() + DEFAULT_IMAGE_FORMAT;
-
FileOutputStream fos = FileOutputStream ใหม่ (ไฟล์ใหม่ (savePath));
ตัวเข้ารหัส JPEGImageEncoder = JPEGCodec.createJPEGEncoder(fos);
encoder.encode (รูปภาพ);
รูปภาพ.ล้าง();
ฟอส.ฟลัช();
ฟอส.ปิด();
กลับบันทึกเส้นทาง;
-
-
* <b>ฟังก์ชั่น:</b> คุณสามารถตั้งค่าคุณภาพการปรับขนาดภาพและปรับขนาดภาพตามความกว้างและความสูงที่ระบุ
*@authorhoojo
* @createDate 2012-2-7 11:01:27 น
* @param width ความกว้างของการปรับขนาด
* @param ความสูงการซูมความสูง
* @param quality คุณภาพการบีบอัดภาพ ค่าสูงสุดคือ 1; ใช้ค่าการแจงนับ: {@link ImageQuality}
* หลักเกณฑ์บางประการ: คุณภาพสูง 0.75, คุณภาพปานกลาง 0.5, คุณภาพต่ำ 0.25
* @param savePath บันทึกไดเร็กทอรี
* @param targetImage รูปภาพเป้าหมายที่จะซูม
* @return เส้นทางและชื่อการบันทึกรูปภาพ
* @ พ่น ImageFormatException
* @throwsIOException
-
การปรับขนาดสตริงคงที่สาธารณะ (ความกว้าง int, ความสูง int, คุณภาพลอย, สตริง savePath, รูปภาพ targetImage) พ่น ImageFormatException, IOException {
ความกว้าง = Math.max (ความกว้าง 1);
ความสูง = Math.max (ความสูง, 1);
รูปภาพ BufferedImage = BufferedImage ใหม่ (ความกว้าง, ความสูง, BufferedImage.TYPE_INT_RGB);
image.getGraphics().drawImage(targetImage, 0, 0, ความกว้าง, ความสูง, null);
ถ้า (savePath == null || "".equals (savePath)) {
savePath = DEFAULT_FILE_PATH + System.currentTimeMillis() + DEFAULT_IMAGE_FORMAT;
-
FileOutputStream fos = FileOutputStream ใหม่ (ไฟล์ใหม่ (savePath));
ตัวเข้ารหัส JPEGImageEncoder = JPEGCodec.createJPEGEncoder(fos);
JPEGEncodeParam encodeParam = JPEGCodec.getDefaultJPEGEncodeParam(รูปภาพ);
ถ้า (คุณภาพ == null || คุณภาพ <= 0) {
คุณภาพ = DEFAULT_SCALE_QUALITY;
-
/**ตั้งค่าคุณภาพการบีบอัดภาพ*/
encodeParam.setQuality (คุณภาพ จริง);
encoder.encode (รูปภาพ, encodeParam);
รูปภาพ.ล้าง();
ฟอส.ฟลัช();
ฟอส.ปิด();
กลับบันทึกเส้นทาง;
-
-
* <b>ฟังก์ชั่น:</b> คำนวณขนาดที่เหมาะสมสำหรับการลดขนาดภาพโดยการระบุขนาดและขนาดของภาพ
*@authorhoojo
* @createDate 2012-2-6 17:53:10 น
* @param width ระบุความกว้าง
* @param height ระบุความสูง
* ไฟล์ภาพ @param
* @return ส่งคืนค่าอาร์เรย์ int ของความกว้างและความสูง
-
int สาธารณะคงที่ [] getSize (ความกว้าง int, ความสูง int, รูปภาพรูปภาพ) {
int targetWidth = image.getWidth (null);
int targetHeight = image.getHeight (null);
มาตราส่วนสองเท่า = getScaling (targetWidth, targetHeight, ความกว้าง, ความสูง);
มาตรฐานยาว = Math.round (targetWidth * มาตราส่วน);
long standardHeight = Math.round (targetHeight * มาตราส่วน);
กลับ int ใหม่ [] { Integer.parseInt(Long.toString(standardWidth)), Integer.parseInt(String.valueOf(standardHeight)) };
-
-
* <b>ฟังก์ชั่น:</b> ส่งกลับความกว้างและความสูงที่ขยายหรือลดลงผ่านอัตราส่วนและวัตถุรูปภาพที่ระบุ
*@authorhoojo
* @createDate 2012-2-7 10:27:59 น
* อัตราส่วนสเกล @param
* @param วัตถุรูปภาพรูปภาพ
* @return กลับความกว้าง,ความสูง
-
int สาธารณะคงที่ [] getSize (ขนาดลอย, รูปภาพรูปภาพ) {
int targetWidth = image.getWidth (null);
int targetHeight = image.getHeight (null);
มาตรฐานยาว = Math.round (targetWidth * สเกล);
long standardHeight = Math.round (targetHeight * สเกล);
กลับ int ใหม่ [] { Integer.parseInt(Long.toString(standardWidth)), Integer.parseInt(String.valueOf(standardHeight)) };
-
int สาธารณะคงที่ [] getSize (ความกว้าง int, รูปภาพรูปภาพ) {
int targetWidth = image.getWidth (null);
int targetHeight = image.getHeight (null);
ความสูงยาว = Math.round((targetHeight * width) / (targetWidth * 1.00f));
กลับ int ใหม่ [] { width, Integer.parseInt(String.valueOf(height)) };
-
int สาธารณะคงที่ [] getSizeByHeight (ความสูง int, รูปภาพรูปภาพ) {
int targetWidth = image.getWidth (null);
int targetHeight = image.getHeight (null);
ความกว้างยาว = Math.round((targetWidth * height) / (targetHeight * 1.00f));
กลับ int ใหม่ [] { Integer.parseInt (String.valueOf (ความกว้าง)), ความสูง };
-
-
-
* <b>ฟังก์ชั่น:</b> ลดความกว้างและความสูงของไฟล์รูปภาพ targetFile ที่ระบุซึ่งมากกว่าความกว้างและความสูงที่ระบุ และบันทึกไว้ในไดเร็กทอรี savePath
*@authorhoojo
* @createDate 6-2-2555 16:57:02 น
* ความกว้าง @param ลดความกว้าง
* @param height ลดความสูง
* @param savePath บันทึกไดเร็กทอรี
* @param targetImage เปลี่ยนรูปภาพเป้าหมาย
* @return เส้นทางและชื่อการบันทึกรูปภาพ
* @ พ่น ImageFormatException
* @throwsIOException
-
การปรับขนาดสตริงคงที่สาธารณะ (ความกว้าง int, ความสูง int, สตริง savePath, ไฟล์ targetFile) พ่น ImageFormatException, IOException {
รูปภาพ = ImageIO.read (ไฟล์เป้าหมาย);
int[] size = getSize(ความกว้าง,ความสูง,รูปภาพ);
ส่งคืนการปรับขนาด (ขนาด [0], ขนาด [1], savePath, รูปภาพ);
-
-
-
* <b>ฟังก์ชัน:</b> ลดความกว้างและความสูงของไฟล์รูปภาพเครือข่าย targetURL ที่ระบุซึ่งมากกว่าความกว้างและความสูงที่ระบุ และบันทึกไว้ในไดเร็กทอรี savePath
*@authorhoojo
* @createDate 6-2-2555 16:57:07 น
* ความกว้าง @param ลดความกว้าง
* @param height ลดความสูง
* @param savePath บันทึกไดเร็กทอรี
* @param targetImage เปลี่ยนรูปภาพเป้าหมาย
* @return เส้นทางและชื่อการบันทึกรูปภาพ
* @ พ่น ImageFormatException
* @throwsIOException
-
การปรับขนาดสตริงคงที่สาธารณะ (ความกว้าง int, ความสูง int, สตริง savePath, URL targetURL) พ่น ImageFormatException, IOException {
รูปภาพ = ImageIO.read (URL เป้าหมาย);
int[] size = getSize(ความกว้าง,ความสูง,รูปภาพ);
ส่งคืนการปรับขนาด (ขนาด [0], ขนาด [1], savePath, รูปภาพ);
-
-
* <b>ฟังก์ชัน:</b> ปรับขนาดไฟล์รูปภาพในเครื่องตามอัตราส่วนที่ระบุ
*@authorhoojo
* @createDate 2012-2-7 10:29:18 น
* อัตราส่วนสเกล @param
* @param savePath บันทึกเส้นทางและชื่อไฟล์
* @param targetFile ไฟล์รูปภาพในเครื่อง
* @return ชื่อไฟล์ใหม่
* @ พ่น ImageFormatException
* @throwsIOException
-
การปรับขนาดสตริงคงที่สาธารณะ (ขนาดลอย, สตริง savePath, ไฟล์ targetFile) พ่น ImageFormatException, IOException {
รูปภาพ = ImageIO.read (ไฟล์เป้าหมาย);
int[] size = getSize(สเกล, รูปภาพ);
ส่งคืนการปรับขนาด (ขนาด [0], ขนาด [1], savePath, รูปภาพ);
-
-
* <b>ฟังก์ชัน:</b> ปรับขนาดไฟล์ภาพเครือข่ายตามอัตราส่วนที่ระบุ
*@authorhoojo
* @createDate 2012-2-7 10:30:56 น
* อัตราส่วนสเกล @param
* @param savePath บันทึกเส้นทางและชื่อไฟล์
* @param targetFile ไฟล์รูปภาพในเครื่อง
* @return ชื่อไฟล์ใหม่
* @ พ่น ImageFormatException
* @throwsIOException
-
การปรับขนาดสตริงคงที่สาธารณะ (สเกลลอย, สตริง savePath, URL targetURL) พ่น ImageFormatException, IOException {
รูปภาพ = ImageIO.read (URL เป้าหมาย);
int[] size = getSize(สเกล, รูปภาพ);
ส่งคืนการปรับขนาด (ขนาด [0], ขนาด [1], savePath, รูปภาพ);
-
-
* <b>ฟังก์ชัน:</b> ปรับขนาดรูปภาพในเครื่องตามสัดส่วนตามความกว้างคงที่
*@authorhoojo
* @createDate 2012-2-7 10:49:56 น
* @param width ความกว้างคงที่
* @param savePath บันทึกเส้นทางและชื่อ
* @param targetFile ไฟล์เป้าหมายในเครื่อง
* @return ส่งกลับเส้นทางการบันทึก
* @ พ่น ImageFormatException
* @throwsIOException
-
การปรับขนาดสตริงคงที่สาธารณะ (ความกว้าง int, สตริง savePath, ไฟล์ targetFile) พ่น ImageFormatException, IOException {
รูปภาพ = ImageIO.read (ไฟล์เป้าหมาย);
int[] size = getSize(ความกว้าง, รูปภาพ);
ส่งคืนการปรับขนาด (ขนาด [0], ขนาด [1], savePath, รูปภาพ);
-
-
* <b>ฟังก์ชัน:</b> ปรับขนาดภาพเครือข่ายตามสัดส่วนตามความกว้างคงที่
*@authorhoojo
* @createDate 2012-2-7 10:50:52 น
* @param width ความกว้างคงที่
* @param savePath บันทึกเส้นทางและชื่อ
* @param targetFile ไฟล์เป้าหมายในเครื่อง
* @return ส่งกลับเส้นทางการบันทึก
* @ พ่น ImageFormatException
* @throwsIOException
-
การปรับขนาดสตริงคงที่สาธารณะ (ความกว้าง int, สตริง savePath, URL targetURL) พ่น ImageFormatException, IOException {
รูปภาพ = ImageIO.read (URL เป้าหมาย);
int[] size = getSize(ความกว้าง, รูปภาพ);
ส่งคืนการปรับขนาด (ขนาด [0], ขนาด [1], savePath, รูปภาพ);
-
-
-
* <b>ฟังก์ชัน:</b> ปรับขนาดรูปภาพในเครื่องตามสัดส่วนตามความสูงคงที่
*@authorhoojo
* @createDate 2012-2-7 10:51:17 น
* @param ความสูง ความสูงคงที่
* @param savePath บันทึกเส้นทางและชื่อ
* @param targetFile ไฟล์เป้าหมายในเครื่อง
* @return ส่งกลับเส้นทางการบันทึก
* @ พ่น ImageFormatException
* @throwsIOException
-
สตริงสาธารณะคงที่ resizeByHeight (ความสูง int, สตริง savePath, ไฟล์ targetFile) พ่น ImageFormatException, IOException {
รูปภาพ = ImageIO.read (ไฟล์เป้าหมาย);
int[] size = getSizeByHeight(ความสูง, รูปภาพ);
ส่งคืนการปรับขนาด (ขนาด [0], ขนาด [1], savePath, รูปภาพ);
-
-
* <b>ฟังก์ชัน:</b> ปรับขนาดภาพเครือข่ายตามสัดส่วนตามความสูงคงที่
*@authorhoojo
* @createDate 2012-2-7 10:52:23 น
* @param ความสูง ความสูงคงที่
* @param savePath บันทึกเส้นทางและชื่อ
* @param targetFile ไฟล์เป้าหมายในเครื่อง
* @return ส่งกลับเส้นทางการบันทึก
* @ พ่น ImageFormatException
* @throwsIOException
-
สตริงสาธารณะคงที่ resizeByHeight (ความสูง int, สตริง savePath, URL targetURL) พ่น ImageFormatException, IOException {
รูปภาพ = ImageIO.read (URL เป้าหมาย);
int[] size = getSizeByHeight(ความสูง, รูปภาพ);
ส่งคืนการปรับขนาด (ขนาด [0], ขนาด [1], savePath, รูปภาพ);
-
-
* <b>ฟังก์ชัน:</b>
*@authorhoojo
* @createDate 2012-2-3 10:08:47 น
* @param args
* @throwsIOException
* @throws MalformedURLException
* @ พ่น ImageFormatException
-
โมฆะคงที่สาธารณะ main (String [] args) พ่น ImageFormatException, MalformedURLException, IOException {
System.out.println(ScaleImageUtils.resize(140, 140, null, URL ใหม่("http://www.open-open.com/lib/images/logo.jpg")));
ScaleImageUtils.resize(100, 100, ImageQuality.high.getQuality(), null, ImageIO.read(URL ใหม่("http://www.open-open.com/lib/images/logo.jpg")));
-
-
ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับการเขียนโปรแกรม Java ของทุกคน