Эта статья представляет собой класс обработки изображений Java, инкапсулированный автором в сочетании с некоторой информацией в Интернете, поддерживая масштабирование, вращение и мозаицизацию изображений.
Без лишних слов, код:
пакет сделки; импорт java.awt.color; import java.awt.graphics; импорт java.awt.graphics2d; import java.awt.image; импорт java.awt.geom.affineTransform; import java.awt.image.affineTransformop; импорт java.awt.iMage.iMage. javax.imageio.imageio;/*** класс обработки изображений. * * @author nagsh * */public class Imagedeal {string openUrl; // исходное изображение открытое пути String SaveUrl; // новое изображение сохранение пути строки SAVENAME; // новое имя имени изображения строка суффикс; // Новый тип изображения поддерживает только GIF, JPG, PNG Public Imagedeal (String OpenUrl, String SaveUrl, String Savename, String Suffix) {this.openurl = openUrl; this.savename = savename; this.saveurl = saveurl; this.suffix = суффикс; } /*** масштабирование изображения. * * @param ширина * Требуемая ширина * @param Высота * Требуемая высота * @throws исключение */ public void Zoom (int width, int height) бросает исключение {double sx = 0,0; двойной sy = 0,0; File file = new File (openurl); if (! file.isfile ()) {бросить новое исключение ("Imagedeal >>>" + file + "не файл изображения!"); } BufferedImage bi = imageio.read (file); // Читать изображение // Рассчитайте коэффициент масштабирования оси y-оси y-оси. sy = (двойной) высота / bi.getheight (); AffineTransformop op = new AffineTransformop (Affinetransform.getScaleInstance (SX, SY), NULL); File sf = new File (saveUrl, savename + "." + Суффикс); Изображение Zoomimage = op.filter (bi, null); try {imageio.write ((BufferedImage) Zoomimage, суффикс, SF); // Сохранить изображение} catch (Exception e) {e.printstackTrace (); }} / ** * rotate * * @param степень * rotate angel * @throhs excection * / public void spin (int degry) throws exection {int swidth = 0; // Ширина после вращения int heuett = 0; // высота после вращения int x; // Происхождение горизонтальная координата int y; // Происхождение вертикального файла координат = новый файл (OpenUrl); if (! file.isfile ()) {бросить новое исключение ("Imagedeal >>>" + file + "не файл изображения!"); } BufferedImage bi = imageio.read (file); // Читать изображение // Степень вращения угла на угла процесса = степень % 360; if (степень <0) степень = 360 + степень; // преобразовать угол в между 0-360 градусами двойной тета = математика.toradians (степень); // преобразовать угол в радианы // определить ширину и высоту после вращения, если (степень == 180 || степень == 0 || градус == 360) {swidth = bi.getwidth (); sheuth = bi.getheight (); } else if (степень == 90 || степень == 270) {sheight = bi.getWidth (); Swidth = bi.getheight (); } else {swidth = (int) (math.sqrt (bi.getwidth () * bi.getwidth () + bi.getheight () * bi.getheight ())); sheuth = (int) (math.sqrt (bi.getwidth () * bi.getwidth () + bi.getheight ())); } x = (swidth / 2) - (bi.getWidth () / 2); // определить координату происхождения y = (shight / 2) - (bi.getheight () / 2); BufferedImage spinimage = new BufferedImage (Swidth, Sheuett, Bi.getType ()); // Установить цвет фона изображения Graphics2d GS = (Graphics2d) spinimage.getGraphics (); gs.setcolor (color.white); Gs.FillRect (0, 0, Swidth, Sheute); // Нарисуйте фон вращающегося изображения в данном цвете AffineTransform AT = New AffineTransform (); at.rotate (Theta, Swidth / 2, Sheuett / 2); // Поверните изображение at.translate (x, y); AffineTransformop op = new AffineTransformop (at, affinetransformop.type_bicubic); spinimage = op.filter (bi, spinimage); File sf = new File (saveUrl, savename + "." + Суффикс); Imageio.write (Spinimage, суффикс, SF); // Сохранить изображение} /*** Мозаика. * @param размер мозаики, то есть длина и ширина каждого прямоугольника * @return * @throws exception */ public boolean mosaic (int size) throws exception {file file = new 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) {// Размер мозаичной сетки слишком велик или слишком маленький возврат false; } int xcount = 0; // количество направления нарисовано int ycount = 0; // Количество направления рисуется в ycount if (bi.getwidth () % size == 0) {xcount = bi.getwidth () / size; } else {xcount = bi.getWidth () / size + 1; } if (bi.getheight () % size == 0) {ycount = bi.getheight () / size; } else {ycount = bi.getheight () / size + 1; } int x = 0; // координаты int y = 0; // Нарисуйте мозаики (рисуйте прямоугольники и заполните цвета) Graphics GS = spinimage.getGraphics (); for (int i = 0; i <xcount; i ++) {for (int j = 0; j <ycount; j ++) {// mosaic rectangle размер int mwidth = size; int mheight = size; if (i == xcount-1) {// Последний в горизонтальном направлении является особенным и может быть недостаточно для одного размера mwidth = bi.getWidth ()-x; } if (j == ycount-1) {// аналогично mheight = bi.getheight ()-y; } // Значение RGB прямоугольника принимает центральный Pixel Int centerx = x; int centery = y; if (mwidth % 2 == 0) {centerx += mwidth / 2; } else {centerx += (mwidth - 1) / 2; } if (mheight % 2 == 0) {centery += mheight / 2; } else {centery += (mheight - 1) / 2; } Color = новый цвет (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 (); File sf = new File (saveUrl, savename + "." + Суффикс); Imageio.write (Spinimage, суффикс, SF); // Сохранить изображение вернуть True; } public static void main (string [] args) бросает исключение {iMagedeal ImageDeal = new Imagedeal ("e: //1.jpg", "e: //", "2", "jpg"); // тестирование масштабирования/* imageal.zoom (200, 300); */ // Тестовое вращение/* Imageal.spin (90); */ // Проверка мозаики/*imageal.mosaic (4);*/}} Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.