直播平台搭建,Android手机拍照和手机相册选取图片的工具

直播平台搭建,Android手机拍照和手机相册选取图片的工具

1
package com.shentaiwang.jsz.savepatient.util;<br> <br>import android.app.Activity;<br>import android.content.ContentValues;<br>import android.content.Context;<br>import android.content.Intent;<br>import android.database.Cursor;<br>import android.graphics.Bitmap;<br>import android.graphics.BitmapFactory;<br>import android.graphics.Canvas;<br>import android.graphics.Matrix;<br>import android.graphics.Paint;<br>import android.graphics.PorterDuff;<br>import android.graphics.PorterDuffXfermode;<br>import android.graphics.Rect;<br>import android.graphics.RectF;<br>import android.net.Uri;<br>import android.os.Environment;<br>import android.provider.MediaStore;<br>import android.util.DisplayMetrics;<br>import android.util.Log;<br>import android.view.WindowManager;<br>import android.widget.Toast;<br> <br>import java.io.BufferedOutputStream;<br>import java.io.ByteArrayOutputStream;<br>import java.io.File;<br>import java.io.FileNotFoundException;<br>import java.io.FileOutputStream;<br>import java.io.IOException;<br>import java.text.SimpleDateFormat;<br>import java.util.Date;<br>import java.util.Locale;<br> <br>/**<br> * Created by user on 2016/12/16.<br> */<br>public class ImageUtil {<br>    public static final int CODE_SETHDIMG_ALNUM = 1;<br>    public static final int CODE_SETHDIMG_CAM = 2;<br>    public static final int CROP_IMG = 100;<br> <br>    public File camImgFile = null;<br>    public File cropImgFile = null;<br> <br>    public void gotoCam(Context context) {<br>        try {<br>        //获取当前系统的android版本号<br>        int currentApiVersion = android.os.Build.VERSION.SDK_INT;<br> <br>        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault());<br>        String str = dateFormat.format(new Date(System.currentTimeMillis()));<br> <br>        //设置保存拍摄照片路径(DCIM/Camera/Modle_PictureWall_img_20170212_122223.jpg)<br>        //路径默认,若修改则不能保存照片<br>        camImgFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM), "/Camera/Modle_PictureWall_img_" + str + ".jpg");<br> <br>        Uri outputImgUriFromCam = null;<br>        if (currentApiVersion < 24) {<br>            outputImgUriFromCam = Uri.fromFile(camImgFile);<br>        } else {<br>            ContentValues contentValues = new ContentValues(1);<br>            contentValues.put(MediaStore.Images.Media.DATA, camImgFile.getAbsolutePath());<br> <br>                outputImgUriFromCam = context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);<br> <br>        }<br> <br>        //跳转到照相机拍照<br>        Intent it = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);<br>        it.putExtra(MediaStore.EXTRA_OUTPUT, outputImgUriFromCam);<br> <br>        ((Activity) context).startActivityForResult(it, CODE_SETHDIMG_CAM);<br>//        startActivityForResult(it,CODE_SETHDIMG_CAM);<br>        }catch (Exception e){<br>            Toast.makeText(context,"请开启摄像权限",Toast.LENGTH_SHORT).show();<br>        }<br>    }<br> <br> <br>    public void gotoAlbum(Context context) {<br>        Intent it = new Intent(Intent.ACTION_PICK,<br>                android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);<br> <br>        ((Activity) context).startActivityForResult(it, CODE_SETHDIMG_ALNUM);<br>//        startActivityForResult(it,CODE_SETHDIMG_ALNUM);<br>    }<br> <br>    public void cropImg(Context context, boolean isFromCam, boolean isSetHd, Intent data, String fileName) {<br>        File inputFile = null;<br> <br>        if (isFromCam) {<br>            inputFile = camImgFile;<br>        } else {<br>            Log.d("ImageUtil", "cropImg:图片数据: "+data.getData());<br>            inputFile = new File(getRealPathFromURI(context, data.getData()));<br>        }<br> <br>        //设置保存路径名称<br>        cropImgFile = new File(context.getExternalFilesDir(fileName), String.valueOf(System.currentTimeMillis()));<br> <br>        WindowManager manager = ((Activity) context).getWindowManager();<br>        DisplayMetrics outMetrics = new DisplayMetrics();<br>        manager.getDefaultDisplay().getMetrics(outMetrics);<br> <br>        Intent it = new Intent("com.android.camera.action.CROP");<br>        it.setDataAndType(getImageContentUri(context, inputFile), "image/*");<br> <br>        it.putExtra("output", Uri.fromFile(cropImgFile));<br>        it.putExtra("crop", "true");<br>        it .putExtra("scale",true);//黑边<br>        it .putExtra("scaleUpIfNeeded",true);//黑边<br> <br> <br>        if (isSetHd) {<br>            // 裁剪框比例<br>            it.putExtra("aspectX", 1);<br>            it.putExtra("aspectY", 1);<br> <br>            // 输出图片大小<br>            it.putExtra("outputX", outMetrics.widthPixels / 2);<br>            it.putExtra("outputY", outMetrics.widthPixels / 2);<br>        } else {<br>            // 裁剪框比例<br>            it.putExtra("aspectX", 3);<br>            it.putExtra("aspectY", 2);<br> <br>            // 输出图片大小<br>            it.putExtra("outputX", 600);<br>            it.putExtra("outputY", 400);<br>        }<br> <br>        // 返回格式<br>        it.putExtra("outputFormat", "JPEG");<br> <br>        ((Activity) context).startActivityForResult(it, CROP_IMG);<br>//        startActivityForResult(it, CROP_IMG);<br>    }<br> <br>    public String getRealPathFromURI(Context context, Uri uri) {<br>        String mImgPath;<br>        String[] filePathColumn = {MediaStore.Images.Media.DATA};<br> <br>        Cursor cursor = context.getContentResolver().query(uri, filePathColumn, null, null, null);<br>        if(cursor!=null){<br>            cursor.moveToFirst();<br>            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);<br>            String picturePath = cursor.getString(columnIndex);<br>            cursor.close();<br>            mImgPath=picturePath;<br>        }else{<br>            mImgPath=uri.getPath();<br>        }<br>        return mImgPath;<br> <br> <br> <br>    }<br> <br>    public Uri getImageContentUri(Context context, File imageFile) {<br>        String filePath = imageFile.getAbsolutePath();<br>        Cursor cursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new String[]{"_id"}, "_data=? ", new String[]{filePath}, (String) null);<br>        if (cursor != null && cursor.moveToFirst()) {<br>            int values1 = cursor.getInt(cursor.getColumnIndex("_id"));<br>            Uri baseUri = Uri.parse("content://media/external/images/media");<br>            return Uri.withAppendedPath(baseUri, "" + values1);<br>        } else if (imageFile.exists()) {<br>            ContentValues values = new ContentValues();<br>            values.put("_data", filePath);<br>            return context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);<br>        } else {<br>            return null;<br>        }<br>    }<br> <br>    public void refreshAlbum(Context context, String path) {<br>        context.sendBroadcast(new Intent("android.intent.action.MEDIA_SCANNER_SCAN_FILE", Uri.parse("file://" + path)));<br>    }<br> <br> <br>    public static byte[] bitmap2Bytes(Bitmap bm) {<br>        ByteArrayOutputStream baos = new ByteArrayOutputStream();<br>        bm.compress(Bitmap.CompressFormat.PNG, 100, baos);<br>        return baos.toByteArray();<br>    }<br> <br>    /**<br>     * 根据byte数组生成文件<br>     *<br>     * @param bytes 生成文件用到的byte数组<br>     */<br>    public static boolean createFileWithByte(byte[] bytes) {<br>        String fileName = "portrait.png";<br> <br> <br>        // TODO Auto-generated method stub<br>        /**<br>         * 创建File对象,其中包含文件所在的目录以及文件的命名<br>         *<br>         */<br>        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {//判断SDCard进行操作<br>            //获取SDCard指定目录下<br>            String sdCardDir = Environment.getExternalStorageDirectory() + "/CropImage/";<br>            File dirFile = new File(sdCardDir);//目录转换成文件夹<br>            if (!dirFile.exists()) {//如果不存在,就建立这个文件夹<br>                dirFile.mkdir();<br>            }<br>            File file = new File(sdCardDir, fileName);<br>            // 创建FileOutputStream对象<br>            FileOutputStream outputStream = null;<br>            // 创建BufferedOutputStream对象<br>            BufferedOutputStream bufferedOutputStream = null;<br>            try {<br>                // 如果文件存在则删除<br>                if (file.exists()) {<br>                    file.delete();<br>                }<br>                // 在文件系统中根据路径创建一个新的空文件<br>                file.createNewFile();<br>                // 获取FileOutputStream对象<br>                outputStream = new FileOutputStream(file);<br>                // 获取BufferedOutputStream对象<br>                bufferedOutputStream = new BufferedOutputStream(outputStream);<br>                // 往文件所在的缓冲输出流中写byte数据<br>                bufferedOutputStream.write(bytes);<br>                // 刷出缓冲输出流,该步很关键,要是不执行flush()方法,那么文件的内容是空的。<br>                bufferedOutputStream.flush();<br>            } catch (Exception e) {<br>                // 打印异常信息<br>                e.printStackTrace();<br>            } finally {<br>                // 关闭创建的流对象<br>                if (outputStream != null) {<br>                    try {<br>                        outputStream.close();<br>                    } catch (IOException e) {<br>                        e.printStackTrace();<br>                    }<br>                }<br>                if (bufferedOutputStream != null) {<br>                    try {<br>                        bufferedOutputStream.close();<br>                    } catch (Exception e2) {<br>                        e2.printStackTrace();<br>                    }<br>                }<br>            }<br>            return true;<br>        }<br>        return false;<br> <br>    }<br> <br>    /**<br>     * 获取文件路径并转换成Bitmap<br>     *<br>     * @param filepath<br>     * @return<br>     */<br>    public static Bitmap getFilePath(String filepath) {<br>        File file = new File(filepath);<br>        Bitmap bm = null;<br>        if (file.exists()) {<br>            bm = BitmapFactory.decodeFile(filepath);<br>        }<br>        return bm;<br>    }<br> <br>    public static Bitmap Bytes2Bitmap(byte[] bytes) {<br>        if (bytes.length != 0) {<br>            return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);<br>        } else {<br>            return null;<br>        }<br>    }<br> <br>    public static Bitmap toRoundCorner(Bitmap bitmap, float ratio) {//把正方形图片转化为圆形,ratio为2<br>        Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),<br>                bitmap.getHeight(), Bitmap.Config.ARGB_8888);<br>        Canvas canvas = new Canvas(output);<br>        final Paint paint = new Paint();<br>        final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());<br>        final RectF rectF = new RectF(rect);<br>        paint.setAntiAlias(true);<br>        canvas.drawARGB(0, 0, 0, 0);<br>        canvas.drawRoundRect(rectF, bitmap.getWidth() / ratio,<br>                bitmap.getHeight() / ratio, paint);<br>        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));<br>        canvas.drawBitmap(bitmap, rect, rect, paint);<br>        return output;<br> <br>    }<br> <br>    public static Bitmap zoomBitmap(Bitmap bitmap, int width, int height) {<br>        int w = bitmap.getWidth();<br>        int h = bitmap.getHeight();<br>        Matrix matrix = new Matrix();<br>        float scaleWidth = ((float) width / w);<br>        float scaleHeight = ((float) height / h);<br>        matrix.postScale(scaleWidth, scaleHeight);<br>        Bitmap newbmp = Bitmap.createBitmap(bitmap, 0, 0, w, h, matrix, true);<br>        return newbmp;<br>    }<br> <br> <br>    public static String savePhotoToSDCard(Bitmap bitmap) {<br>        String photoName = "";<br>        if (checkSDCardAvailable()) {<br>            // 图片时间命名<br>            SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");<br>            Date date = new Date(System.currentTimeMillis());<br>            photoName = format.format(date);<br>            // 存储至DCIM文件夹下<br>            File dir = new File(Environment<br>                    .getExternalStorageDirectory() + "/Stw/temp/save/");<br>            if (!dir.exists()) {<br>                dir.mkdirs();<br>            }<br> <br>            File photoFile = new File(dir.getAbsolutePath(), photoName + ".png");<br>            Bitmap photoBitmap = bitmap;<br>//            FileOutputStream fileOutputStream = null;<br>//            try {<br>//                fileOutputStream = new FileOutputStream(photoFile);<br>            if (photoBitmap != null) {<br>//                    double maxSize = 400.00;<br>                // 将bitmap放至数组中,意在bitmap的大小(与实际读取的原文件要大)<br>                ByteArrayOutputStream baos = new ByteArrayOutputStream();<br>                photoBitmap.compress(Bitmap.CompressFormat.JPEG, 80, baos);<br>                int options = 80;//先压缩到80%<br>                while (baos.toByteArray().length / 1024 > 200) { // 循环判断如果压缩后图片是否大于200kb,大于继续压缩<br>                    if (options <= 0) {//有的图片过大,可能当options小于或者等于0时,它的大小还是大于目标大小,于是就会发生异常,异常的原因是options超过规定值。所以此处需要判断一下<br>                        break;<br>                    }<br>                    baos.reset();// 重置baos即清空baos<br>                    options -= 10;// 每次都减少10<br>                    bitmap.compress(Bitmap.CompressFormat.JPEG, options, baos);<br>                }<br>//                    byte[] b = baos.toByteArray();<br>//                    // 将字节换成KB<br>//                    double mid = b.length / 1024;<br>//                    // 判断bitmap占用空间是否大于允许空间 如果大于则压小于则不压缩<br>//                    if (mid > maxSize) {<br>//                        // 获取bitmap大小 是允许最大大小的多少<br>//                        double i = mid / maxSize;<br>//                        // 压缩 此处用到平方将宽带和高度压缩掉对应的平方根<br>//                        // 保持刻度和高度和原bitmap比率,压缩后也达到了大小占用空间的大小)<br>//                        photoBitmap = zoomImage(photoBitmap,<br>//                                photoBitmap.getWidth() / Math.sqrt(i),<br>//                                photoBitmap.getHeight() / Math.sqrt(i));<br>//                    }<br>//                    if (photoBitmap.compress(Bitmap.CompressFormat.PNG, 100,<br>//                            fileOutputStream)) {<br>//                        fileOutputStream.flush();<br>//                        // fileOutputStream.close();<br>//                    }<br>                try {<br>                    FileOutputStream fos = new FileOutputStream(photoFile);<br>                    fos.write(baos.toByteArray());<br>                    fos.close();<br>                    baos.close();<br>                    return photoFile.getAbsolutePath();<br>                } catch (Exception e) {<br> <br>                }<br> <br> <br>            }<br>//            } catch (FileNotFoundException e) {<br>//                photoFile.delete();<br>//                e.printStackTrace();<br>//            } catch (IOException e) {<br>//                photoFile.delete();<br>//                e.printStackTrace();<br>//            } finally {<br>//                try {<br>//                    if (fileOutputStream != null) {<br>//                        fileOutputStream.close();<br>//                    }<br>//                } catch (IOException e) {<br>//                    e.printStackTrace();<br>//                }<br>//            }<br> <br>        }<br> <br>        return null;<br>    }<br> <br>    /**<br>     * 压缩图片<br>     */<br>    public static Bitmap zoomImage(Bitmap bgimage, double newWidth,<br>                                   double newHeight) {<br>        // 获取这个图片的宽和高<br>        float width = bgimage.getWidth();<br>        float height = bgimage.getHeight();<br>        // 创建操作图片用的matrix对象<br>        Matrix matrix = new Matrix();<br>        // 计算宽高缩放�?<br>        float scaleWidth = ((float) newWidth) / width;<br>        float scaleHeight = ((float) newHeight) / height;<br>        // 缩放图片动作<br>        matrix.postScale(scaleWidth, scaleHeight);<br>        Bitmap bitmap = Bitmap.createBitmap(bgimage, 0, 0, (int) width,<br>                (int) height, matrix, true);<br>        return bitmap;<br>    }<br> <br>    //检查sd卡是否存在<br>    public static boolean checkSDCardAvailable() {<br>        return Environment.getExternalStorageState().equals(<br>                Environment.MEDIA_MOUNTED);<br>    }<br> <br> <br>}<br> <br> 

​ 以上就是直播平台搭建,Android手机拍照和手机相册选取图片的工具, 更多内容欢迎关注之后的文章

 

posted @   云豹科技-苏凌霄  阅读(163)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示