安卓将图片分割或者拉伸或者旋转到指定尺寸并保存到本地

直接上代码吧:你们要用的话可以按照想法改

复制代码
package com.demo.util;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.os.Environment;
import android.util.Log;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class ImageProcessingUtils {

    // 将图片分割并拉伸到指定尺寸并保存到本地
    public static void splitAndSaveImage(String imagePath, int splitCount, int targetWidth, int targetHeight) {
        // 1. 读取原始图片
        Log.e("TAG", "imagePath=======" + imagePath);
        Bitmap originalBitmap = BitmapFactory.decodeFile(imagePath);
        try {
            int originalWidth = originalBitmap.getWidth();
            int originalHeight = originalBitmap.getHeight();
            Log.e("TAG", "originalWidth=======" + originalWidth);
            Log.e("TAG", "originalHeight=======" + originalHeight);
            // 2. 计算分割后每部分图片的宽度和高度
            int splitWidth = originalWidth / splitCount;
            int splitHeight = originalHeight - 1;
            Log.e("TAG", "splitWidth=======" + splitWidth);
            Log.e("TAG", "splitHeight=======" + splitHeight);
            // 3. 创建输出目录(如果不存在)
            File outputDirectory = new File(Environment.getExternalStorageDirectory() + "/split_images");
            if (!outputDirectory.exists()) {
                outputDirectory.mkdirs();
            }

            // 4. 分割并拉伸图片,并保存到本地
            for (int col = 0; col < splitCount; col++) {
                Log.e("TAG", "col=======" + col);
                int startX = col * splitWidth;
                int startY = 0;
                Log.e("TAG", "startX=======" + startX);
                Log.e("TAG", "startY=======" + startY);
                // 获取分割区域的图像
                Bitmap splitBitmap = Bitmap.createBitmap(originalBitmap, startX, startY,
                        splitWidth, splitHeight);

                // 拉伸图像尺寸
               //Bitmap resizedBitmap = Bitmap.createScaledBitmap(splitBitmap,
               //        targetWidth, targetHeight, true);


               // // 旋转图像
               // Matrix matrix = new Matrix();
               // matrix.postRotate(90);
               // Bitmap rotatedBitmap = Bitmap.createBitmap(splitBitmap, 0, 0,
               //         splitWidth, splitHeight, matrix, true);
//
                // 构建输出文件路径
                String outputFilePath = outputDirectory.getAbsolutePath() + "/split_image_" + col + ".png";

                Log.e("TAG", "outputFilePath=======" + outputFilePath);
                // 保存图像到本地
                saveImage(splitBitmap, outputFilePath);
            }
        }catch (Exception c){
            Log.e("TAG", "c=======" + c.getMessage());
        }

    }

    // 保存图片到本地
    private static void saveImage(Bitmap bitmap, String filePath) {
        try {
            FileOutputStream out = new FileOutputStream(filePath);
            bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
            out.flush();
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

调用方式:ImageProcessingUtils.splitAndSaveImage(sourcePath,3,width,height);

sourcePath:原始图像地址

3:平均分成三份

width,height:想要拉伸的尺寸

相关推荐
张拭心4 分钟前
春节后,有些公司明确要求 AI 经验了
android·前端·人工智能
张拭心15 分钟前
Android 17 来了!新特性介绍与适配建议
android·前端
Kapaseker2 小时前
Compose 进阶—巧用 GraphicsLayer
android·kotlin
黄林晴3 小时前
Android17 为什么重写 MessageQueue
android
阿巴斯甜1 天前
Android 报错:Zip file '/Users/lyy/develop/repoAndroidLapp/l-app-android-ble/app/bu
android
Kapaseker1 天前
实战 Compose 中的 IntrinsicSize
android·kotlin
xq95271 天前
Andorid Google 登录接入文档
android
黄林晴1 天前
告别 Modifier 地狱,Compose 样式系统要变天了
android·android jetpack
冬奇Lab2 天前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读
城东米粉儿2 天前
Android MediaPlayer 笔记
android