Как создать png из jpg с обрезкой фона в java(android)?

Пользователь

от cloyd , в категории: Другие , 9 месяцев назад

Как создать png из jpg с обрезкой фона в java(android)?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от leila.dickinson , 8 месяцев назад

@cloyd 

Вы можете использовать библиотеку Android GraphicsMagick для обрезки фона изображения в формате JPG и его конвертации в формат PNG. Вот пример кода, который показывает, как это сделать:

  1. Добавьте зависимость в файл build.gradle вашего модуля:
1
2
3
dependencies {
    implementation 'graphicsmagick:graphicsmagick:1.3.29'
}


  1. Создайте метод для обрезки фона изображения и конвертации его в формат PNG:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PorterDuff;

import com.graphicsmagick.GraphicsMagick;
import com.graphicsmagick.ImageInfo;
import com.graphicsmagick.MagickImage;

import java.io.FileOutputStream;

public class ImageUtils {

    public static void convertJpegToPngWithBackgroundCrop(String inputFilePath, String outputFilePath) {
        try {
            ImageInfo info = new ImageInfo(inputFilePath);
            MagickImage image = new MagickImage(info);

            int width = image.getWidth();
            int height = image.getHeight();

            Bitmap bitmap = BitmapFactory.decodeFile(inputFilePath);
            Bitmap croppedBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
            Canvas canvas = new Canvas(croppedBitmap);
            canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);

            Paint paint = new Paint();
            paint.setColor(Color.BLACK);
            paint.setAntiAlias(true);

            canvas.drawBitmap(bitmap, 0, 0, paint);

            image.readPixels(0, 0, width, height, "BGRA");
            image.setPixels(croppedBitmap.getPixels(), 0, width, 0, 0, width, height);

            image.writeImage(info.getExtension(), outputFilePath);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


  1. Используйте метод, чтобы обрезать фон изображения в формате JPG и сохранить его в формате PNG:
1
2
3
4
String inputFilePath = "/path/to/input/image.jpg";
String outputFilePath = "/path/to/output/image.png";

ImageUtils.convertJpegToPngWithBackgroundCrop(inputFilePath, outputFilePath);


Убедитесь, что вы заменили "/path/to/input/image.jpg" и "/path/to/output/image.png" своими реальными путями к файлам изображений.

Пользователь

от kennedi_pfeffer , месяц назад

@cloyd 

Извините за путаницу, но библиотека GraphicsMagick не является стандартной или широко используемой в Android разработке. Вместо этого, вы можете использовать встроенные средства Android SDK для обработки изображений. Ниже приведен пример, как обрезать фон изображения JPEG и сохранить его в формате PNG с помощью Android SDK:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Rect;

import java.io.FileOutputStream;

public class ImageUtils {

    public static void convertJpegToPngWithBackgroundCrop(String inputFilePath, String outputFilePath) {
        try {
            Bitmap bitmap = BitmapFactory.decodeFile(inputFilePath);
            Bitmap croppedBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);
            Canvas canvas = new Canvas(croppedBitmap);
            canvas.drawColor(Color.TRANSPARENT, android.graphics.PorterDuff.Mode.CLEAR);

            Rect srcRect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
            Rect destRect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
            canvas.drawBitmap(bitmap, srcRect, destRect, null);

            FileOutputStream outputStream = new FileOutputStream(outputFilePath);
            croppedBitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream);
            outputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


Вы можете использовать этот код, чтобы обрезать фон изображения в формате JPEG и сохранить его в формате PNG. Убедитесь, что у вас есть разрешение на использование хранилища и пути к изображениям верны.