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

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

复制代码
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:想要拉伸的尺寸

相关推荐
Libraeking1 小时前
破壁行动:在旧项目中丝滑嵌入 Compose(混合开发实战)
android·经验分享·android jetpack
市场部需要一个软件开发岗位2 小时前
JAVA开发常见安全问题:Cookie 中明文存储用户名、密码
android·java·安全
JMchen1234 小时前
Android后台服务与网络保活:WorkManager的实战应用
android·java·网络·kotlin·php·android-studio
crmscs4 小时前
剪映永久解锁版/电脑版永久会员VIP/安卓SVIP手机永久版下载
android·智能手机·电脑
localbob4 小时前
杀戮尖塔 v6 MOD整合版(Slay the Spire)安卓+PC端免安装中文版分享 卡牌肉鸽神作!杀戮尖塔中文版,电脑和手机都能玩!杀戮尖塔.exe 杀戮尖塔.apk
android·杀戮尖塔apk·杀戮尖塔exe·游戏分享
机建狂魔4 小时前
手机秒变电影机:Blackmagic Camera + LUT滤镜包的专业级视频解决方案
android·拍照·摄影·lut滤镜·拍摄·摄像·录像
hudawei9964 小时前
flutter和Android动画的对比
android·flutter·动画
lxysbly6 小时前
md模拟器安卓版带金手指2026
android
儿歌八万首7 小时前
硬核春节:用 Compose 打造“赛博鞭炮”
android·kotlin·compose·春节
消失的旧时光-194310 小时前
从 Kotlin 到 Dart:为什么 sealed 是处理「多种返回结果」的最佳方式?
android·开发语言·flutter·架构·kotlin·sealed