Android旋转本地图片并保存

之前写的《Android获取SD卡上所有图片、视频缩略图和音乐专辑封面》获取到了图片并显示,现在需要对图片进行旋转操作,并且要保存旋转后的图片。

分为三个步骤:
1.获得图片文件的路径及Bitmap格式的图片
2.旋转图片一定角度,得到新图片
3.把新图片保存到原来的路径,即覆盖原来的图片保存

1.获得图片文件的路径及Bitmap格式的图片

根据之前写的《Android获取SD卡上所有图片、视频缩略图和音乐专辑封面》很容易就完成第一步:

//获取图片
Bitmap picture = BitmapFactory.decodeFile(mFileInfo.getFilePath());

2.旋转图片一定角度,得到新图片

用Matrix来旋转图片。

/**
 * @Description 旋转图片一定角度
 * @param bitmap 要旋转的图片
 * @param degree 要旋转的角度
 * @return 旋转后的图片
 */
public Bitmap rotatePicture(final Bitmap bitmap, final int degree) {
    Matrix matrix = new Matrix();
    matrix.postRotate(degree);
    Bitmap resizeBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
}

3.把新图片保存到原来的路径,即覆盖原来的图片保存

/**
 * @Description 保存图片到指定路径
 * @param bitmap 要保存的图片
 * @param filePath 目标路径
 * @return 是否成功
 */
public boolean saveBmpToPath(final Bitmap bitmap, final String filePath) {
    if (bitmap == null || filePath == null) {
        return false;
    }
    boolean result = false; //默认结果
    File file = new File(filePath);
    OutputStream outputStream = null; //文件输出流
    try {
        outputStream = new FileOutputStream(file);
        result = bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream); //将图片压缩为JPEG格式写到文件输出流,100是最大的质量程度
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (outputStram != null) {
            try {
                outputStream.close(); //关闭输出流
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    return result;
}

示例:完整调用

以下为我项目用到的代码片段,其中FileInfo为自定义数据结构

public boolean doRotate(final int degree) {
    //得到Gallery当前选中的item的数据
    FileInfo fileInfo = (FileInfo) mPictureGallery.getSelectedItem();
    //第一步
    Bitmap picture = BitmapFactory.decodeFile(fileInfo.getFilePath());
    //第二步
    Bitmap resizePicture = rotatePicture(picture, degree);
    //第三步
    saveBmpToPath(resizePicture, fileInfo.getFilePath());
    //更新Gallery显示
    mPictureGallery.updateData();
}

Reference:《Android 图片Bitmap保存到内存卡》


如果你又任何问题,欢迎留言告诉我!

  • 6
    点赞
  • 3
    收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿曌

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值