1. الصورة المصغرة
عند تصفح الألبومات ، قد تحتاج إلى إنشاء صور مصغرة مقابلة.
قم بتحميل الكود مباشرة:
الفئة العامة ImageUtil {private logger log = loggerFactory.getLogger (getClass ()) ؛ سلسلة ثابتة خاصة default_prevfix = "thumb_" ؛ vemault_forte static vemault_force = false ؛ // يوصى بأن تكون هذه القيمة خاطئة/*** <p> العنوان: thumbnailimage </p>* <p> الوصف: إنشاء thumbnails بناءً على مسار الصورة </p>* param phickpath path* param whumbnail width* param h thumbnail إجبار ما إذا كان يجب إجبار الصور المصغرة على توليدها وفقًا للعرض والارتفاع (إذا كان خطأ ، يتم إنشاء أفضل صورة مصغرة على نطاق) */ thumbnailimage public void (String ImagePath ، int W ، int H ، String Prevfix ، Boolean Force) {file imgfile = ملف جديد (ملف ImagePath) ؛ if (imgfile.exists ()) {try {// imageio أنواع الصور المدعومة: [BMP ، BMP ، JPG ، JPG ، WBMP ، JPEG ، PNG ، PNG ، JPEG ، WBMP ، GIF ، GIF] string = arrays.toString (Imageio.getReadForformatnames ()) ؛ سلسلة لاحقة = فارغة ؛ // احصل على لاحقة الصورة if (imgfile.getName (). indexof (".")> -1) {fuckix = imgfile.getName (). substring (imgfile.getName (). lastindexof (".") + 1) ؛ } // type and facture reglase regcase ، ثم تحديد ما إذا كانت اللاحقة قانونية إذا (lugfix == null || types.toLowerCase (). indexof (fuck.tolowercase ()) <0) {log.error ("آسف ، لاحقة الصورة غير قانونية. صورة الصورة القياسية هي {}." + أنواع) ؛ يعود ؛ } log.debug ("حجم الصورة الهدف ، العرض: {} ، الارتفاع: {}." ، w ، h) ؛ Image IMG = Imageio.Read (imgfile) ؛ if (! force) {// ابحث عن مقياس الصورة المصغرة الأنسب استنادًا إلى الصورة الأصلية ومقياس thumbnail المطلوب width = img.getWidth (null) ؛ ارتفاع int = img.getheight (null) ؛ if ((العرض*1.0)/w <(الارتفاع*1.0)/h) {if (width> w) {h = integer.parseint (new java.text.decimalformat ("0"). format (height*w/(width*1.0))) ؛ log.debug ("تغيير ارتفاع الصورة ، العرض: {} ، الارتفاع: {}." ، w ، h) ؛ }} else {if (height> h) {w = integer.parseint (new java.text.decimalformat ("0"). format (width * h/(height * 1.0))) ؛ log.debug ("تغيير عرض الصورة ، العرض: {} ، الارتفاع: {}." ، w ، h) ؛ }}} bufferedImage BI = جديد bufferedImage (W ، H ، BufferedImage.type_int_rgb) ؛ الرسومات g = bi.getGraphics () ؛ G.DrawImage (IMG ، 0 ، 0 ، W ، H ، Color.light_gray ، null) ؛ G.Dispose () ؛ سلسلة p = imgfile.getPath () ؛ // احفظ الصورة في الدليل الأصلي و premix imageio.write (BI ، لاحقة ، ملف جديد (p.subString (0 ، p.lastindexof (file.separator)) + file.separator + previx + imgfile.getName ())) ؛ log.debug ("Thumbnail تم إنشاؤه بنجاح في المسار الأصلي") ؛ } catch (ioException e) {log.error ("فشل إنشاء صورة thumbnail." ، e) ؛ }} آخر {log.warn ("الصورة غير موجودة.") ؛ }} public static void main (string [] args) {new ImageUtil (). thumbnailimage ("c:/user/cm/desktop/my page/images/girlnoimg.jpg" ، 100 ، 150 ، default_prevfix ، default_force) ؛ }}قم بتشغيل الطريقة الرئيسية مباشرة وملء المعلمات المقابلة.
2. تعاون مع JS لتوليد صور اقتصاص
عندما نقوم بتعديل معلومات Weibo و QQ الشخصية الخاصة بنا ، يمكننا تحميل صورنا الشخصية ، ثم قطع صورنا الشخصية وتحميلها. يتم تنفيذ حجم وأسلوب الصور المزروعة من خلال JavaScript ، لكنه لا يولد صورة جديدة. ومع ذلك ، توفر الصور المزروعة JS إحداثيات X و Y وعرضها وارتفاع الصورة. من خلال هذه المعلمات الأربعة ، يمكننا إنشاء صور اقتصاص جديدة بناءً على الصورة الأصلية.
خطوة:
1. أولاً ، استخدمت JS لإدراك وظيفة قص وتصفح الصورة من خلال الصفحة. لقد أشرت إلى المعلومات المقدمة من MOOC وغيرها قليلاً. بالإضافة إلى ذلك ، يمكننا أيضًا استخدام المكونات الإضافية ، مثل JCROP ، وهو مكون مكون من نوع جيد جدًا لاستقصاء الصور.
تنزيل عنوان: http://download.csdn.net/detail/u012385190/9733480
التقديم النهائي على النحو الوارد أعلاه. يمكنك السحب والسحب على اليسار ، وصورة المعاينة على اليمين.
2. جافا يولد ويحفظ الصور المقطوعة
الفئة العامة ImageUtil2 {private logger log = loggerFactory.getLogger (getClass ()) ؛ سلسلة ثابتة خاصة default_cut_prevfix = "cut_" ؛ / *** الوصف: اعتراض الصور المحلية استنادًا إلى الصورة الأصلية وحجم المحاصيل* param srcimg صورة المصدر* param دفق إخراج الصورة* param rected الإحداثيات وحجم الجزء يجب اعتراضه*/ public void cutimage (file srcimg ، outputstream output ، java.awt.rectangle rect) { java.io.fileInputStream fis = null ؛ ImageInputStream iis = null ؛ حاول {fis = new FileInputStream (srcimg) ؛ // أنواع الصور المدعومة من Imageio: [BMP ، BMP ، JPG ، JPG ، WBMP ، JPEG ، PNG ، PNG ، // JPEG ، WBMP ، GIF ، GIF] String Types = Arrays.ToString (imageio.getReaderFormatnames ().). سلسلة لاحقة = فارغة ؛ // احصل على لاحقة الصورة إذا (srcimg.getName (). indexof (". }. يعود؛ }. // احصل على صور من هذا النوع وفقًا لنوع الصورة ImageReader Reader = imageio.getImagerEadersBysuffix (لاحقة) .next () ؛ reader.setInput (iis ، true) ؛ imagereadparam param = reader.getDefaultReadParam () ؛ param.setsourceregion (Rect) ؛ BufferedImage BI = reader.read (0 ، param) ؛ imageio.write (BI ، لاحقة ، الإخراج) ؛ log.info ("يتم إنشاء الصورة بنجاح ، يرجى الانتقال إلى الدليل لعرضه") ؛ } catch (fileNotFoundException e) {e.printStackTrace () ؛ } catch (ioException e) {E.PrintStackTrace () ؛ } أخيرًا {try {if (fis! = null) fis.close () ؛ إذا (iis! = null) iis.close () ؛ } catch (ioException e) {E.PrintStackTrace () ؛ }}} آخر {log.warn ("صورة SRC غير موجودة.") ؛ }} // إنشاء مسار الملف الهدف public void cutimage (file srcimg ، string destimgpath ، java.awt.rectangle rect) {file destimg = new file (destimgpath) ؛ if (destimg.exists ()) {string p = destimg.getPath () ؛ حاول {if (! destimg.isdirectory ()) p = destimg.getParent () ؛ if (! p.endswith (file.separator)) p = p + file.separator ؛ CutImage (srcimg ، new java.io.fileOutputStream (p+ default_cut_prevfix+ "_"+ srcimg.getName ()) ، rect) ؛ } catch (fileNotfoundException e) {log.warn ("صورة القدر غير موجودة.") ؛ }} آخر log.warn ("مجلد صورة القدر غير موجود.") ؛ } public void cutimage (String srcimg ، string destimg ، int x ، int y ، int width ، int height) {cutImage (ملف جديد (srcimg) ، destimg ، new java.awt.rectangle (x ، y ، width ، height)) ؛ } main static void main (string [] args) {new ImageUtil2 (). cutImage ("c:/user/cm/desktop/my fage/images/boynoimg.jpg" ، "c:/users/cm/desktop/my page/images/imgs" ، 0 ، 0 ، 61 ، 166) ؛ // new ImageUtil2 (). cutimage ("C: /users/cm/desktop/jcrop-master/demos/demo_files/sago.jpg" ، "C:/user/cm/desktop/my page/images/imgs" ، 124 ، 110 ، 196 ، 176) ؛ }}يمكن تشغيل هذه الطريقة مباشرة بشكل رئيسي. المعلمات الأربعة التي تم تمريرها هي مسار الصورة والقيمة اليسرى والقيمة العليا والطول والعرض.
دعنا نحلل كيفية الحصول على هذه المعلمات الأربعة:
1. أخذ قطع JS الخاص بي كمثال ، أحصل على ما يلي من خلال F12:
الجزء الأحمر في الصورة هو Div لقطع الصورة. يمكننا ملاحظة المعلمات التي تم تغييرها عن طريق سحب حجم وعرض منطقة القطع ، وما إلى ذلك ، ثم تحديد قيم المعلمات التي تتوافق مع قيم المعلمة المقابلة المحددة. كما هو الحال في الصورة ، يبلغ عرض x/y/الارتفاع 40،28222228 على التوالي.
ملاحظة: في JS ، أقوم بتحديد طول وعرض Div والصورة على أنها 300*300. من أجل التعاون مع الاختبار ، فإن الصورة التي قمت بتنزيلها هي أيضًا 300*300. إذا لم يكن حجم الصورة الذي اختبرته 300*300 ، فإن التأثير الذي اختبرته مباشرة في Java أعلاه سيكون مختلفًا عما تراه في الواجهة الأمامية ، لأنني أحدد عرض وارتفاع صورتك الأمامية على أنها 300*300 ، في حين أن صورتك الفعلية (أي الصورة في Java) ليست كذلك.
فماذا لو تم التعامل مع هذه المشكلة؟
احصل على طول وعرض الصورة الأصلية في رمز Java الخاص بك ، ثم حدد ما إذا كان طول وعرض الصورة الأصلية 300*300. إذا لم يكن الأمر كذلك ، قم بإنشاء صورة مصغرة 300*300 من الصورة ، ثم استخدم صورة مصغرة 300*300 كنموذج أولي للصورة. (لا يعالج الكود الخاص بي ، سأقوم بمعالجته بنفسي إذا احتجت إليه ، وحذف الصور المصغرة بعد استخدام الصورة)
2. JCROP يحصل على معلمات
كما هو موضح في الشكل ، يوفر JCROP معلمات مباشرة ويمكن استخدامه مباشرة. لكن أحد العيوب هو أن مساحة حجم الصورة في الصفحة الأمامية غير ثابتة. إذا كان لديك صورة بكسل كبيرة ، فستكون قبيحة للغاية. على سبيل المثال ، إذا كان لدي صورة soga_bak.jpg في الملف المقابل ، فسيكون الأمر سيئًا إذا استبدلتها بهذه الصورة.
لذلك باختصار ، يوصى باستخدام أول JS ، ثم تحديد ما إذا كان طول وعرض الصورة الأصلية 300 ، وإنشاء 300*300 صورة مصغرة ، ثم استخدم الصورة المصغرة كنموذج أولي للمحصول ، ثم حذف الصورة المصغرة بعد استخدامه.
ما ورد أعلاه هو طريقة مثال على محصول صورة Java وتوليد الصور المصغرة المقدمة لك من قبل المحرر. إنها مشكلة غير صالحة لطلبات الحصول على. آمل أن يكون ذلك مفيدًا لك. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر إليك في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!