هذه المقالة عبارة عن فئة معالجة صور Java تغليفها المؤلف مع بعض المعلومات على الإنترنت ، ودعم التحجيم والدوران والفسيفساء للصور.
دون مزيد من اللغط ، الرمز:
حزمة صفقة ؛ استيراد java.awt.color ؛ استيراد java.awt.graphics ؛ استيراد java.awt.graphics2d ؛ استيراد java.awt.image ؛ استيراد java.awt.geom.affinetransform ؛ import java.awt.awt.affinetrantformop ؛ import java.awt.ebuffeile ؛ javax.imageio.imageio ؛/*** فئة معالجة الصور. * * author nagsh * */public class imagedeal {string openurl ؛ // الصورة الأصلية Open Path String Saveurl ؛ // الصورة الجديدة حفظ سلسلة المسار savename ؛ // لاحقة سلسلة اسم الصورة الجديدة ؛ . this.savename = savename ؛ this.saveurl = saveurl ؛ this.suffix = لاحقة ؛ } /*** تحجيم الصورة. * * عرض param * العرض المطلوب * @بارام الارتفاع * ارتفاع مطلوب * Throws استثناء */ Zoom public void (عرض int ، ارتفاع int) يلقي الاستثناء {double sx = 0.0 ؛ مزدوج SY = 0.0 ؛ ملف الملف = ملف جديد (OpenUrl) ؛ if (! file.isfile ()) {رمي استثناء جديد ("imagedeal >>>" + file + "ليس ملف صورة!") ؛ } bufferedImage bi = imageio.read (file) ؛ // اقرأ الصورة // احسب نسبة التحجيم المحور X- المحور-إذا كان هناك حاجة إلى تحجيم متساوٍ ، تأكد من أن عرض المعلمات والارتفاع متكافئين قبل الاتصال = (مزدوج) عرض/ bi.getWidth () ؛ sy = (مزدوج) الارتفاع / bi.getheight () ؛ AffinetRansformop op = AffinetRansformop جديد (AffinetRansform.getScaleinstance (SX ، SY) ، NULL) ؛ ملف sf = ملف جديد (SaveUrl ، savename + "." + لاحقة) ؛ Zoomimage Image = op.filter (Bi ، null) ؛ حاول {imageio.write ((bufferedImage) Zoomimage ، لاحقة ، sf) ؛ // حفظ الصورة} catch (استثناء e) {E.PrintStackTrace () ؛ }} / ** * rotate * * param درجة * تدوير الزاوية * athrows استثناء * / public void spin (int degate) استثناء {int swidth = 0 ؛ // العرض بعد الدوران int snight = 0 ؛ // الارتفاع بعد الدوران int x ؛ // Origin Fenizontal Coordate int y ؛ // ملف ملف الإحداثيات العمودي الأصل = ملف جديد (OpenUrl) ؛ if (! file.isfile ()) {رمي استثناء جديد ("imagedeal >>>" + file + "ليس ملف صورة!") ؛ } bufferedImage bi = imageio.read (file) ؛ // اقرأ الصورة // درجة الزاوية درجة الدوران درجة = درجة ٪ 360 ؛ إذا (الدرجة <0) درجة = 360 + درجة ؛ // تحويل الزاوية إلى ما بين 0-360 درجة ثيتا = Math.Toradians (درجة) ؛ // تحويل الزاوية إلى radians // تحديد العرض والارتفاع بعد التدوير إذا (درجة == 180 || درجة == 0 || درجة == 360) snight = bi.getheight () ؛ } آخر إذا (درجة == 90 || درجة == 270) {snight = bi.getWidth () ؛ swidth = bi.getheight () ؛ } آخر {swidth = (int) (math.sqrt (bi.getWidth () * bi.getWidth () + bi.getheight () * bi.getheight ())) ؛ snight = (int) (math.sqrt (bi.getWidth () * bi.getWidth () + bi.getheight ())) ؛ } x = (swidth / 2) - (bi.getWidth () / 2) ؛ // تحديد إحداثي الأصل y = (Shight / 2) - (bi.getheight () / 2) ؛ bufferedImage Spinimage = جديد bufferedImage (swidth ، snight ، bi.gettype ()) ؛ // قم بتعيين لون الخلفية لـ Image Graphics2d GS = (Graphics2d) Spinimage.getGraphics () ؛ gs.setColor (color.hite) ؛ gs.fillRect (0 ، 0 ، swidth ، sneight) ؛ // ارسم خلفية الصورة المدورة بألوان محددة Affinetrans في = New AffinetRansform () ؛ at.rotate (theta ، swidth / 2 ، sneight / 2) ؛ // تدوير الصورة على. translate (x ، y) ؛ AffinetRansformop op = AffinetRansformop جديد (AT ، AffinetRansformOp.type_bicubic) ؛ Spinimage = op.filter (Bi ، Spinimage) ؛ ملف sf = ملف جديد (SaveUrl ، savename + "." + لاحقة) ؛ imageio.write (Spinimage ، لاحقة ، SF) ؛ // حفظ الصورة} /*** الفسيفساء. * @param size size mosaic ، أي طول وعرض كل مستطيل * return * @throws استثناء */ الفسيفساء المنطقية العامة (حجم int) يلقي استثناء {file file = ملف جديد (openurl) ؛ if (! file.isfile ()) {رمي استثناء جديد ("imagedeal >>>" + file + "ليس ملف صورة!") ؛ } bufferedImage bi = imageio.read (file) ؛ // اقرأ الصورة bufferedimage spinimage = new BufferEdImage (bi.getWidth () ، bi.getheight () ، bi.type_int_rgb) ؛ if (bi.getWidth () <size || bi.getheight () <size || size <= 0) {// حجم شبكة الفسيفساء كبيرة جدًا أو عوائد صغيرة جدًا ؛ } int xcount = 0 ؛ // يتم رسم عدد الاتجاه int ycount = 0 ؛ // يتم رسم عدد الاتجاه في ycount if (bi.getWidth () ٪ size == 0) {xCount = bi.getWidth () / size ؛ } آخر {xCount = bi.getWidth () / size + 1 ؛ } if (bi.getheight () ٪ size == 0) {ycount = bi.getheight () / size ؛ } آخر {ycount = bi.getheight () / size + 1 ؛ } int x = 0 ؛ // إحداثيات int y = 0 ؛ // ارسم الفسيفساء (ارسم مستطيلات وألوان ملء) الرسومات GS = Spinimage.getGraphics () ؛ لـ (int i = 0 ؛ i <xcount ؛ i ++) {for (int j = 0 ؛ j <ycount ؛ j ++) {// mosaic stistangle size int mwidth = size ؛ int mheight = الحجم ؛ إذا كان (i == xcount-1) {// آخر واحد في الاتجاه الأفقي أمر خاص ، وقد لا يكون كافياً لحجم واحد mwidth = bi.getWidth ()-x ؛ } if (j == ycount-1) {// بالمثل mheight = bi.getheight ()-y ؛ } // قيمة RGB للون المستطيل تأخذ البكسل المركزي int centerx = x ؛ int centery = y ؛ if (mwidth ٪ 2 == 0) {centerx += mwidth / 2 ؛ } آخر {centerx += (mwidth - 1) / 2 ؛ } if (mheight ٪ 2 == 0) {centery += mheight / 2 ؛ } آخر {centery += (mheight - 1) / 2 ؛ } لون اللون = لون جديد (bi.getrgb (centerx ، centery)) ؛ gs.setColor (اللون) ؛ Gs.FillRect (x ، y ، mwidth ، mheight) ؛ y = y + size ؛ // احسب إحداثيات y للمستطيل التالي} y = 0 ؛ // استعادة إحداثيات y x = x + size ؛ // احسب إحداثيات x} gs.dispose () ؛ ملف sf = ملف جديد (SaveUrl ، savename + "." + لاحقة) ؛ imageio.write (Spinimage ، لاحقة ، SF) ؛ // حفظ الصورة إرجاع صحيح ؛ } public static void main (string [] args) يلقي الاستثناء {imagedeal imagedeal = new imagedeal ("e: //1.jpg" ، "e: //" ، "2" ، "jpg") ؛ // اختبار التحجيم/* imagedeal.zoom (200 ، 300) ؛ */// اختبار دوران/* imagedeal.spin (90) ؛ */// اختبار Mosaic/*imagedeal.mosaic (4) ؛*/}} ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.