1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/xshuai-imagetool

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

💳Благодарим за поддержку

Троецарствие https://gitee.com/zoy1985

Благодарим за предоставленный код

Чжоу Вэй https://gitee.com/bejson

GIF-сжатие (https://gitee.com/xshuai/imagetool/blob/master/src/main/java/cn/xsshome/imagetool/util/GifImageUtil.java)

Автор https://img.shields.io/badge/%E4%BD%9C%E8%80%85-%E5%B0%8F%E5%B8%85%E4%B8%B6-7AD6FD.svg

Подписывайтесь на обновления от Кода Малыша

Код Малыша

├── cn.xsshome.imagetool            //пакет
├── convert                               
│   └── ImageToChar             //преобразование изображения в символы
├── slideverifycode        
│   └── SlideVerifyCodeGenerateUtil      //инструмент для генерации кода с ползунка
│   └── SlideVerifyCode         //код с ползунка
├── util        
│   └── AnimatedGifEncoder      //необходимые инструменты для GIF
│   └── Base64Util              //инструменты для преобразования данных изображения в base64
│   └── GifDecoder              //обработка изображений GIF
│   └── GifImageUtil            //добавление текста к изображениям GIF
│   └── GongGeUtil              //обработка девятисегментных изображений
│   └── LZWEncoder              //необходимые инструменты для обработки изображений
│   └── MergeImageUtil          //объединение эффектов изображений
│   └── NeuQuant                //необходимые инструменты для обработки изображений
│   └── PngColoringUtil         //добавление фона к прозрачным изображениям
│   └── RotateImageUtil         //поворот изображений
│   └── ImageLosslessUtil       //сохранение изображений без потерь
│   └── MergeImageFontUtil      //объединение шрифтов и изображений
│   └── ImageGrayUtil           //преобразование изображений в оттенки серого
│   └── ImageDPIHandleUtil      //изменение DPI изображений (поддерживает только JPG)
│   └── ImagePixelUtil          //пиксельные эффекты изображений
│   └── ImageWaterMarkUtil      //добавление водяных знаков к изображениям
└── zoom   
    └── ImageHelper             //масштабирование изображений

Пример кода

public class Sample {
    public static void main(String[] args) throws Exception {
        ImageToChar.load("G:/phone.jpg", "F:/gif/woman.txt");//статическое изображение преобразуется в текст и сохраняется в txt-файл
        ImageToChar.loadGif("C:/Users/Administrator/Desktop/页面录屏显示.gif", "F:/gif/");//динамическое изображение преобразуется в динамическое изображение символов
        BufferedImage bi = null;
        bi = ImageIO.read(new File("G:/body.jpg"));
        String bytePic = ImageToChar.txtToImageByBase64(bi);//статическое изображение преобразуется в текстовый формат и возвращается как base64-изображение
        System.out.println(bytePic);
    }
}

Добавление фона к прозрачному изображению

    public static void main(String[] args) throws Exception{
        String image = "F:\\testimg\\1011.png";//путь к исходному изображению
        String resultImage = "F:\\testimg\\10111700.jpg";//путь сохранения обработанного изображения
        changePNGBackgroudColor(image,resultImage, Color.pink);//Цвет.розовый - цвет фона изображения
    }

Поворот изображения

public class RotateSample {
    public static void main(String[] args) throws  Exception {
        long start = System.currentTimeMillis();
        BufferedImage src = ImageIO.read(new File("E:\\testimg\\glassess.png"));//исходное изображение
        BufferedImage des = RotateImageUtil.rotateImage(src,20);//угол поворота
        ImageIO.write(des, "png", new File("E:\\testimg\\glassess2.png"));//сохранение повернутого изображения
        long end = System.currentTimeMillis();
        System.out.println("Начало времени:" + start+ "; 结束时间:" + end+ "; 总共用时:" + (end - start) + "(ms)");
    }
}

Добавление текста к GIF-изображению

    public static void main(String[] args) throws Exception {
        GifImageUtil gifImageUtil = new GifImageUtil();
        String imagesavePath  = "C:\\Users\\xiaoshuai\\Desktop";//путь сохранения изображения
        String imagesaveName = String.valueOf(System.currentTimeMillis());//имя файла без расширения
        String image  = "C:\\Users\\xiaoshuai\\Desktop\\db.gif";//исходное изображение
        String result = gifImageUtil.gifAddText(imagesavePath,imagesaveName,"微软雅黑",25,Color.pink,image,"Добавление текста к изображению","Тестирование","1234","4567");
        System.out.println(result);
    }

Преобразование белого фона в прозрачный

    public static void main(String[] args) {
        System.out.println(PngConvertUtil.transparentImg("F:/testimg/hand.jpg",
``` **Увеличение водяных знаков: примеры кода**

public static void main(String[] args) { // Водяной знак — изображение в указанной позиции BufferedImage image1 = ImageWaterMarkUtil.addImgWaterMark("F:/testimg/hand2020.png")); File file = new File("F:\testimg\2020082701.jpg"); ImageIO.write(image1, "jpg", file); // Текстовый водяной знак заполняет всё изображение BufferedImage image2 = ImageWaterMarkUtil.addFullTextWaterMark("F://testimg//gjy2.jpg","小帅丶代码"); File file2 = new File("F:\testimg\2020082702.jpg"); ImageIO.write(image2, "jpg", file2); // Иконка водяного знака заполняет всё изображение BufferedImage image3 = ImageWaterMarkUtil.addFullImgWaterMark("F://testimg//gjy2.jpg","F://testimg//water.png"); File file3 = new File("F:\testimg\2020082703.jpg"); ImageIO.write(image3, "jpg", file3); }


**GIF-изображение с добавленными спецэффектами текста:**

* Исходное изображение:

![Исходное изображение](https://images.gitee.com/uploads/images/2019/0516/174359_5b52fe9a_131538.gif "Исходное изображение.gif")

* Преобразованное изображение:

![Преобразованное изображение](https://images.gitee.com/uploads/images/2019/0516/174432_2af80fd2_131538.gif "Преобразованное изображение.gif")

**Добавление прямоугольной рамки к изображению:**

* Исходное изображение:

![Исходное изображение](https://images.gitee.com/uploads/images/2019/0815/182016_0b2cc009_131538.jpeg "Исходное изображение")

* Обработанное изображение:

![Обработанное изображение](https://images.gitee.com/uploads/images/2019/0815/182040_bb819a35_131538.jpeg "Обработанное изображение")

**Наложение фонового изображения на прозрачное:**

public static void main(String[] args) throws Exception{ // Лучше всего сохранить ширину или высоту одинаковой
BufferedImage src = ImageIO.read(new File("F:\testimg\gjy2.jpg"));// Фоновое изображение BufferedImage png = ImageIO.read(new File("F:\testimg\banner.png"));// Прозрачное изображение BufferedImage image = MergeImageUtil.mergePendant(src, png, 0, 0, 1); File file = new File("F:\testimg\banner320.jpg");// Путь сохранения изображения ImageIO.write(image, "jpg", file); }

* Прозрачное изображение:

![Прозрачное изображение](https://images.gitee.com/uploads/images/2020/0320/160106_fc19f62c_131538.png "banner.png")

* Фоновое изображение:

![Фоновое изображение](https://images.gitee.com/uploads/images/2020/0320/160135_d92b311e_131538.jpeg "gjy2.jpg")

* Результат:

![Результат](https://images.gitee.com/uploads/images/2020/0320/160211_4895c067_131538.jpeg "banner320.jpg")

**Добавление водяных знаков к изображениям:**

* Оригинальное изображение:

![Оригинальное изображение](https://images.gitee.com/uploads/images/2020/0827/172243_a7975f28_131538.jpeg "Оригинальное изображение")

* Текст:

小帅丶代码


* Изображение водяного знака (можно увидеть содержимое PNG-изображения, нажав на пустое место):

![Изображение водяного знака](https://images.gitee.com/uploads/images/2020/0827/172443_45847ea1_131538.png "Изображение водяного знака")

* Добавление текстового водяного знака, который заполняет всё изображение:

![Добавление текстового водяного знака, который заполняет всё изображение](https://images.gitee.com/uploads/images/2020/0827/172320_22e1ee88_131538.jpeg "Добавление текстового водяного знака, который заполняет всё изображение")

* Добавление изображения водяного знака, которое заполняет всё изображение:

![Добавление изображения водяного знака, которое заполняет всё изображение](https://images.gitee.com/uploads/images/2020/0827/172345_0fd36ffd_131538.jpeg "Добавление изображения водяного знака, которое заполняет всё изображение")

* Добавление водяного знака изображения в указанную позицию:

![Добавление водяного знака изображения в указанную позицию](https://images.gitee.com/uploads/images/2020/0827/172409_255894e7_131538.jpeg "Добавление водяного знака изображения в указанную позицию")

**Добавление текста к изображению (устранение зубчатости и сохранение без потерь):**

public class FontImgMergeSample { /** Шрифт / private static String FONT_FAMILY = "方正粗黑宋简体"; /* Размер шрифта / private static Integer FONT_SIZE = 88; /* Цвет */ private static Color FONT_COLOR = new Color(255,255,255);

public static void main(String[] args) throws Exception{
    long startTime = System.currentTimeMillis();
    // Путь исходного изображения, путь сохранения обработанного изображения
    String sourcePath = "F:\\testfile\\testimg\\banner.jpg";
    String targetPath = "F:\\testfile\\testimg\\mergebanner.jpg";
    BufferedImage image = ImageIO.read(new File(sourcePath));
    // Текст
    String content = "小帅测试代码";
    Graphics2D g = (Graphics2D) image.getGraphics();
    // Заполнение текста слева направо
    MergeImageFontUtil.setContentToImgLR(content, g, 100, 200,FONT_FAMILY,FONT_SIZE,FONT_COLOR);
    ImageLosslessUtil.saveLosslessImage(image, targetPath, ImageType.IMAGE_TYPE_JPG);
    System.out.println("Общее время:"+(System.currentTimeMillis()-startTime));
}

}

* Оригинальное изображение:

[Исходное изображение](src/main/files/banner.jpg)

* Обработанное изображение:

[Обработанное изображение](src/main/files/mergebanner.jpg)

**Обработка изображений в градациях серого:**

В тексте запроса не представлен код для обработки изображений в градации серого. ```
ImageGrayUtil.grayImage3ByteBGR(sourcePath);
    // 图片灰度处理 纯黑
    BufferedImage bufferedImage = ImageGrayUtil.grayImageByteGRAY(sourcePath);
    // 无压缩保存图片
    ImageLosslessUtil.saveLosslessImage(bufferedImage, targetPath, imageSuffix);
}

原图

原图

Обработка после TYPE_BYTE_GRAY

Обработка после TYPE_BYTE_GRAY

Обработка после TYPE_3BYTE_BGR

Обработка после TYPE_3BYTE_BGR

Байевое изображение

Байевое изображение
Байевое изображение

Изображение в виде сетки из девяти квадратов

Изображение в виде сетки из девяти квадратов

Исходное изображение с пиксельным стилем

Исходное изображение с пиксельным стилем

Обработанное изображение с пиксельным стилем

Обработанное изображение с пиксельным стилем

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/xshuai-imagetool.git
git@api.gitlife.ru:oschina-mirror/xshuai-imagetool.git
oschina-mirror
xshuai-imagetool
xshuai-imagetool
master