يصف المثال الموجود في هذه المقالة طريقة إنشاء الصور المصغرة وقياس نسب الصور في Java. شاركها مع الجميع لتكون مرجعا لك. طريقة التنفيذ المحددة هي كما يلي:
يدعم هذا المثيل قياس عرض الصورة وارتفاعها إلى العرض والارتفاع المحددين، وحفظها في الدليل المحدد. يتم حساب نسبة تقليل الصورة بناءً على حجم الكائن المستهدف والحجم القياسي (المحدد) للصورة يمكن ضبط جودة القياس، ويمكن ضبط جودة تغيير حجم الصورة وفقًا لمقياس الصورة المحدد في العرض والارتفاع.
الكود المحدد هو كما يلي:
انسخ رمز الكود كما يلي:
package com.hoo.util;
import java.awt.Image;
import java.awt.image.BufferedImage;
استيراد java.io.File؛
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.MalformedURLException;
استيراد java.net.URL؛
import javax.imageio.ImageIO;
import com.sun.image.codec.jpeg.ImageFormatException;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import 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
*/
التعداد العام جودة الصورة {
الحد الأقصى (1.0 فهرنهايت)، عالي (0.75 فهرنهايت)، متوسط (0.5 فهرنهايت)، منخفض (0.25 فهرنهايت)؛
جودة تعويم خاصة؛
الحصول على الجودة العائمة العامة () {
إرجاع هذه الجودة؛
}
جودة الصورة (جودة التعويم) {
this.quality = الجودة؛
}
}
صورة صورة ثابتة خاصة؛
/**
* <b>الوظيفة:</b> حساب نسبة تصغير الصورة بناءً على حجم الكائن المستهدف والحجم القياسي (المحدد)
*@authorhoojo
* @createDate2012-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؛
إذا (الهدفالعرض> العرض القياسي) {
widthScaling = StandardWidth / (targetWidth * 1.00d);
} آخر {
widthScaling = 1d;
}
إذا (targetHeight > StandardHeight) {
heightScaling = StandardHeight / (targetHeight * 1.00d)؛
} آخر {
heightScaling = 1d;
}
return Math.min(widthScaling, heightScaling);
}
/**
* <b>الوظيفة:</b> قم بقياس عرض الصورة وارتفاعها إلى العرض والارتفاع المحددين، واحفظها في دليل savePath
*@authorhoojo
*@createDate2012-2-6 04:54:35 مساءً
* @param width عرض القياس
* @param ارتفاع التكبير الارتفاع
*param savePath حفظ الدليل
* @param targetImage الصورة المستهدفة المراد تكبيرها
* @return مسار حفظ الصورة واسمها
* @ يلقي ImageFormatException
* @throwsIOException
*/
تغيير حجم السلسلة الثابتة العامة (عرض int، ارتفاع int، String savePath، Image targetImage) يطرح ImageFormatException، IOException {
width = Math.max(width, 1);
height = Math.max(height, 1);
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
image.getGraphics().drawImage(targetImage, 0, 0, width, height, null);
إذا (savePath == null || "".equals(savePath)) {
savePath = DEFAULT_FILE_PATH + System.currentTimeMillis() + DEFAULT_IMAGE_FORMAT؛
}
FileOutputStream fos = new FileOutputStream(new File(savePath));
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fos);
encoder.encode(image);
image.flush();
fos.flush();
fos. Close();
إرجاع مسار الحفظ؛
}
/**
* <b>الوظيفة:</b> يمكنك ضبط جودة قياس الصورة وقياس الصورة وفقًا للعرض والارتفاع المحددين.
*@authorhoojo
* @createDate 2012-2-7 11:01:27 صباحًا
* @param width عرض القياس
* @param ارتفاع التكبير الارتفاع
* @param جودة جودة ضغط الصورة، الحد الأقصى للقيمة هو 1، استخدم قيمة التعداد: {@link ImageQuality}؛
* بعض الإرشادات: 0.75 جودة عالية، 0.5 جودة متوسطة، 0.25 جودة منخفضة
*param savePath حفظ الدليل
* @param targetImage الصورة المستهدفة المراد تكبيرها
*return مسار حفظ الصورة واسمها
* @ يلقي ImageFormatException
* @throwsIOException
*/
تغيير حجم السلسلة الثابتة العامة (عرض int، ارتفاع int، جودة التعويم، String savePath، Image targetImage) يلقي ImageFormatException، IOException {
width = Math.max(width, 1);
height = Math.max(height, 1);
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
image.getGraphics().drawImage(targetImage, 0, 0, width, height, null);
إذا (savePath == null || "".equals(savePath)) {
savePath = DEFAULT_FILE_PATH + System.currentTimeMillis() + DEFAULT_IMAGE_FORMAT؛
}
FileOutputStream fos = new FileOutputStream(new File(savePath));
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fos);
JPEGEncodeParam encodeParam = JPEGCodec.getDefaultJPEGEncodeParam(image);
إذا (الجودة == فارغة || الجودة <= 0) {
الجودة = DEFAULT_SCALE_QUALITY؛
}
/**ضبط جودة ضغط الصورة*/
encodeParam.setQuality(quality, true);
encoder.encode(image, encodeParam);
image.flush();
fos.flush();
fos. Close();
إرجاع مسار الحفظ؛
}
/**
* <b>الوظيفة:</b> حساب الحجم المناسب لتصغير الصورة من خلال تحديد حجم الصورة وحجمها
*@authorhoojo
* @createDate 2012-2-6 05:53:10 مساءً
* @param width العرض المحدد
* @param height الارتفاع المحدد
* ملف صورة @param
* @return يُرجع المصفوفة الصحيحة للعرض والارتفاع
*/
public static int[] getSize(int width, int height, Image image) {
int targetWidth = image.getWidth(null);
int targetHeight = image.getHeight(null);
Double Scaling = getScaling(targetWidth, targetHeight, width, height);
long StandardWidth = Math.round(targetWidth * scaling);
long StandardHeight = Math.round(targetHeight * scaling);
return new 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);
long StandardWidth = Math.round(targetWidth *scale);
long StandardHeight = Math.round(targetHeight *scale);
return new int[] { Integer.parseInt(Long.toString(standardWidth)), Integer.parseInt(String.valueOf(standardHeight)) };
}
public static int[] getSize(int width, Image image) {
int targetWidth = image.getWidth(null);
int targetHeight = image.getHeight(null);
long height = Math.round((targetHeight * width) / (targetWidth * 1.00f));
إرجاع جديد int[] { width, Integer.parseInt(String.valueOf(height)) };
}
public static int[] getSizeByHeight(int height, Image image) {
int targetWidth = image.getWidth(null);
int targetHeight = image.getHeight(null);
long width = Math.round((targetWidth * height) / (targetHeight * 1.00f));
return new int[] { Integer.parseInt(String.valueOf(width)), height };
}
/**
*
* <b>الوظيفة:</b> تقليل العرض والارتفاع لملف صورة targetFile المحدد الذي يكون أكبر من العرض والارتفاع المحددين، وحفظهما في دليل savePath.
*@authorhoojo
* @createDate2012-2-6 04:57:02 مساءً
* عرضparam مخفض العرض
* @param height انخفاض الارتفاع
*param savePath حفظ الدليل
* @param targetImage تم تغيير الصورة المستهدفة
*return مسار حفظ الصورة واسمها
* @ يلقي ImageFormatException
* @throwsIOException
*/
تغيير حجم السلسلة الثابتة العامة (عرض int، ارتفاع int، String savePath، File targetFile) يطرح ImageFormatException، IOException {
image = ImageIO.read(targetFile);
int[] size = getSize(width, height, image);
return resize(size[0], size[1], savePath, image);
}
/**
*
* <b>الوظيفة:</b> تقليل العرض والارتفاع لملف صورة الشبكة targetURL المحدد والذي يكون أكبر من العرض والارتفاع المحددين، وحفظهما في دليل savePath.
*@authorhoojo
* @createDate2012-2-6 04:57:07 مساءً
* عرضparam مخفض العرض
* @param height انخفاض الارتفاع
*param savePath حفظ الدليل
* @param targetImage تم تغيير الصورة المستهدفة
* @return مسار حفظ الصورة واسمها
* @ يلقي ImageFormatException
* @throwsIOException
*/
تغيير حجم السلسلة الثابتة العامة (عرض int، ارتفاع int، String savePath، URL targetURL) يطرح ImageFormatException، IOException {
image = ImageIO.read(targetURL);
int[] size = getSize(width, height, image);
return resize(size[0], size[1], savePath, image);
}
/**
* <b>الوظيفة:</b> قم بقياس ملف صورة محلي وفقًا للنسبة المحددة
*@authorhoojo
* @createDate 2012-2-7 10:29:18 صباحًا
* @param نسبة التحجيم
*param savePath حفظ مسار الملف واسمه
*param targetFile ملف الصورة المحلي
* @return اسم الملف الجديد
* @ يلقي ImageFormatException
* @throwsIOException
*/
تغيير حجم السلسلة الثابتة العامة (مقياس التعويم، سلسلة savePath، ملف الهدفFile) يطرح ImageFormatException، IOException {
image = ImageIO.read(targetFile);
int[] size = getSize(scale, image);
return resize(size[0], size[1], savePath, image);
}
/**
* <b>الوظيفة:</b> قم بقياس ملف صورة الشبكة وفقًا للنسبة المحددة
*@authorhoojo
* @createDate 2012-2-7 10:30:56 صباحًا
* @param نسبة التحجيم
*param savePath حفظ مسار الملف واسمه
*param targetFile ملف الصورة المحلي
* @return اسم الملف الجديد
* @ يلقي ImageFormatException
* @throwsIOException
*/
تغيير حجم السلسلة الثابتة العامة (المقياس العائم، سلسلة savePath، URL targetURL) يطرح ImageFormatException، IOException {
image = ImageIO.read(targetURL);
int[] size = getSize(scale, image);
return resize(size[0], size[1], savePath, image);
}
/**
* <b>الوظيفة:</b> قم بقياس الصور المحلية بشكل متناسب وفقًا لعرض ثابت
*@authorhoojo
* @createDate 2012-2-7 10:49:56 صباحًا
* عرضparam عرض ثابت
*param savePath حفظ المسار والاسم
*param targetFile ملف الهدف المحلي
* @return يُرجع مسار الحفظ
* @ يلقي ImageFormatException
* @throwsIOException
*/
تغيير حجم السلسلة الثابتة العامة (عرض int، String savePath، File targetFile) يطرح ImageFormatException، IOException {
image = ImageIO.read(targetFile);
int[] size = getSize(width, image);
return resize(size[0], size[1], savePath, image);
}
/**
* <b>الوظيفة:</b> قم بقياس صور الشبكة بشكل متناسب وفقًا لعرض ثابت
*@authorhoojo
* @createDate 2012-2-7 10:50:52 صباحًا
* عرضparam عرض ثابت
*param savePath حفظ المسار والاسم
*param targetFile ملف الهدف المحلي
* @return يُرجع مسار الحفظ
* @ يلقي ImageFormatException
* @throwsIOException
*/
تغيير حجم السلسلة الثابتة العامة (عرض int، String savePath، URL targetURL) يطرح ImageFormatException، IOException {
image = ImageIO.read(targetURL);
int[] size = getSize(width, image);
return resize(size[0], size[1], savePath, image);
}
/**
*
* <b>الوظيفة:</b> قم بقياس الصور المحلية بشكل متناسب وفقًا لارتفاع ثابت
*@authorhoojo
* @createDate 2012-2-7 10:51:17 صباحًا
* @param ارتفاع ثابت الارتفاع
*param savePath حفظ المسار والاسم
*param targetFile ملف الهدف المحلي
* @return يُرجع مسار الحفظ
* @ يلقي ImageFormatException
* @throwsIOException
*/
سلسلة ثابتة عامة resizeByHeight(int height, String savePath, File targetFile) throws ImageFormatException, IOException {
image = ImageIO.read(targetFile);
int[] size = getSizeByHeight(height, image);
return resize(size[0], size[1], savePath, image);
}
/**
* <b>الوظيفة:</b> قم بقياس صور الشبكة بشكل متناسب وفقًا لارتفاع ثابت
*@authorhoojo
* @createDate 2012-2-7 10:52:23 صباحًا
* @param ارتفاع ثابت الارتفاع
*param savePath حفظ المسار والاسم
*param targetFile ملف الهدف المحلي
* @return يُرجع مسار الحفظ
* @ يلقي ImageFormatException
* @throwsIOException
*/
سلسلة ثابتة عامة resizeByHeight(int height, String savePath, URL targetURL) throws ImageFormatException, IOException {
image = ImageIO.read(targetURL);
int[] size = getSizeByHeight(height, image);
return resize(size[0], size[1], savePath, image);
}
/**
* <b>الوظيفة:</b>
*@authorhoojo
* @createDate 2012-2-3 10:08:47 صباحًا
* @param args
* @throwsIOException
* @throws MalformedURLException
* @ يلقي ImageFormatException
*/
public static void main(String[] args) throws ImageFormatException, MalformedURLException, IOException {
System.out.println(ScaleImageUtils.resize(140, 140, null, new URL("http://www.open-open.com/lib/images/logo.jpg")));
ScaleImageUtils.resize(100, 100, ImageQuality.high.getQuality(), null, ImageIO.read(new URL("http://www.open-open.com/lib/images/logo.jpg")));
}
}
آمل أن تكون هذه المقالة مفيدة لبرمجة جافا للجميع.