精华内容
下载资源
问答
  • Android 保存图片到手机相册

    万次阅读 热门讨论 2017-12-07 10:25:22
    有时候确实是保存成功了(通过IO流将图片写入了SDCard),但打开相册却看不那张图片,需要在文件管理软件上才能找到那张图片,在网上找了许多文章,貌似都保存相册那里,这应该就是手机品牌的原因,有的品牌的...

    有一种很常见的需求,当保存图片的时候,客户需要在相册里面看到那张图片。有时候确实是保存成功了(通过IO流将图片写入了SDCard),但打开相册却看不到那张图片,需要在文件管理软件上才能找到那张图片,在网上找了许多文章,貌似都保存不到相册那里,这应该就是手机品牌的原因,有的品牌的手机能显示在相册里,有的品牌的手机却不能。解决这种问题,最简单粗暴的方法是,用那台手机拍一张照片,然后找到它,查看它的路径详情,直接根据路径用IO流写入,Android SDK 的 Build.BRAND 变量为当前手机的品牌,根据不同的品牌来做兼容处理,如果有读者用了这篇文章的代码还是不能在相册显示,可以对着这个思路来做兼容。另外值得一提的是,图片格式需要为JPEG格式才能显示在相册中,我们拍的照片也是JPEG格式的。下面用代码来实现上述的想法。

    鉴于目前手机的版本普遍为Android 6.0 以上,读写外部存储文件都需要动态申请权限。这部分代码可以在当前需要读写外部存储文件的Activity中写。

    String[] PERMISSIONS = {
            "android.permission.READ_EXTERNAL_STORAGE",
            "android.permission.WRITE_EXTERNAL_STORAGE" };
    //检测是否有写的权限
    int permission = ContextCompat.checkSelfPermission(this,
            "android.permission.WRITE_EXTERNAL_STORAGE");
    if (permission != PackageManager.PERMISSION_GRANTED) {
        // 没有写的权限,去申请写的权限,会弹出对话框
        ActivityCompat.requestPermissions(this, PERMISSIONS,1);
    }
    
    保存文件的方法:
    public void SaveBitmapFromView(View view) {
        int w = view.getWidth();
        int h = view.getHeight();
        Bitmap bmp = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
        Canvas c = new Canvas(bmp);
        view.layout(0, 0, w, h);
        view.draw(c);
    	// 缩小图片
    	Matrix matrix = new Matrix();
    	matrix.postScale(0.5f,0.5f); //长和宽放大缩小的比例
    	bmp = Bitmap.createBitmap(bmp,0,0,               bmp.getWidth(),bmp.getHeight(),matrix,true);
    	DateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");  
        saveBitmap(bmp,format.format(new Date())+".JPEG");
    }
    
    /*
     * 保存文件,文件名为当前日期
     */
    Public void saveBitmap(Bitmap bitmap, String bitName){
           String fileName ;
            File file ;
            if(Build.BRAND .equals("Xiaomi") ){ // 小米手机 
                fileName = Environment.getExternalStorageDirectory().getPath()+"/DCIM/Camera/"+bitName ;
            }else{  // Meizu 、Oppo
                fileName = Environment.getExternalStorageDirectory().getPath()+"/DCIM/"+bitName ;
            }
            file = new File(fileName);
    
            if(file.exists()){
                file.delete();
            }
            FileOutputStream out;
            try{
                out = new FileOutputStream(file);
    	// 格式为 JPEG,照相机拍出的图片为JPEG格式的,PNG格式的不能显示在相册中
                if(bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out))
                {
                    out.flush();
                    out.close();
    // 插入图库   
    					             MediaStore.Images.Media.insertImage(this.getContentResolver(), file.getAbsolutePath(), bitName, null);
                   
                }
            }
            catch (FileNotFoundException e)
            {
                e.printStackTrace();
            }
            catch (IOException e)
            {
                e.printStackTrace();
    
            }
    		// 发送广播,通知刷新图库的显示
            this.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + fileName)));
    
    }
    

    以上就是保存图片到相册的方式,代码写在Activity类中,而我们只要稍微封装一下这些代码到你的ImageUtil 或者 FileUtil那样类里面,你就可以方便地运用到你的项目中了,这里我就不封装了。

    展开全文
  • 有时候确实是保存成功了(通过IO流将图片写入了SDCard),但打开相册却看不那张图片,需要在文件管理软件上才能找到那张图片,在网上找了许多文章,貌似都保存相册那里,这应该就是手机品牌的原因,有的品牌的...
  • 把bitmap保存到手机相册

    千次阅读 2016-03-25 20:39:20
    把bitmap保存到手机相册 public void saveBitmap() { // 首先保存图片 File appDir = new File(Environment.getExternalStorageDirectory(), "LOL"); if (!appDir.exists()) {
    • 把bitmap保存到手机相册

       public void saveBitmap() {
                  // 首先保存图片
                  File appDir = new File(Environment.getExternalStorageDirectory(), "LOL");
                  if (!appDir.exists()) {
                      appDir.mkdir();
                  }
                  String fileName = picList.get(page-1);
                  fileName = fileName.substring(fileName.length()-18,fileName.length());
                  File pictureFile = new File(appDir, fileName);
                  if (pictureFile.exists()) {
                      pictureFile.delete();
                  }
                  try {
                      FileOutputStream out = new FileOutputStream(pictureFile);
                      Bitmap bm = pictureMap.get(page-1);
                      bm.compress(Bitmap.CompressFormat.PNG, 90, out);
                      out.flush();
                      out.close();
                      Snackbar.make(findViewById(android.R.id.content), "保存图片成功"+pictureFile.getAbsolutePath(), Snackbar.LENGTH_SHORT).show();
      
                  } catch (FileNotFoundException e) {
                      e.printStackTrace();
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
                  // 其次把文件插入到系统图库
                  try {
                      MediaStore.Images.Media.insertImage(getContentResolver(),
                              pictureFile .getAbsolutePath(), fileName, null);
                  } catch (FileNotFoundException e) {
                      e.printStackTrace();
                  }
                  // 最后通知图库更新
                  Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
                  Uri uri = Uri.fromFile(pictureFile);intent.setData(uri);
                  sendBroadcast(intent);//这个广播的目的就是更新图库,发了这个广播进入相册就可以找到你保存的图片了!,记得要传你更新的file哦
              }
      
    展开全文
  • 先展示保存的结果:将左图截图(Bitmap类型)保存到手机文件夹(此处的“内部存储”其实不是真正意义的“内部存储”。严格地说更像是SD卡) 步骤: step1.申请手机存储权限 1.1AndroidManifest.xml文件获取...

    先展示保存的结果:将左图截图(Bitmap类型)保存到手机文件夹(此处的“内部存储”其实不是真正意义的“内部存储”。严格地说更像是SD卡)

     

    步骤:

    step1.申请手机存储权限

    1.1AndroidManifest.xml文件获取外部存储权限

        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    1.2动态申请存储权限

    这一步很关键,我在Android 8.0上测试时,只有进行了动态获取才实现了存储图片的功能

    /**
         * 获取存储权限
         */
        private void getPermissions(){
            if (ContextCompat.checkSelfPermission(this,
                    Manifest.permission.WRITE_EXTERNAL_STORAGE)
                    != PackageManager.PERMISSION_GRANTED)
            {
                ActivityCompat.requestPermissions(this,
                        new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                        MY_PERMISSIONS_REQUEST_SAVE_PICTRUE);
                //权限还没有授予,需要在这里写申请权限的代码
            }
            else{
                //权限已申请,执行XXX操作
            }
        }

    1.3重写权限申请结果处理方法

      @Override
        public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)
        {
            if (requestCode == MY_PERMISSIONS_REQUEST_SAVE_PICTRUE)
            {
                if (grantResults[0] == PackageManager.PERMISSION_GRANTED)
                {
                    //Toast.makeText(XXXActivity.this, "Permission GET", Toast.LENGTH_SHORT).show();
                } else
                {
                    // Permission Denied
                    //Toast.makeText(XXXActivity.this, "Permission Denied", Toast.LENGTH_SHORT).show();
                }
            }else{
                //申请其它权限
            }
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        }

     

    step2.保存文件

        /**屏幕截图保存*/
        private void saveScreenShot(Bitmap bitmap)  {
            String extStorageDirectory = Environment.getExternalStorageDirectory().toString();
            OutputStream outStream = null;
            String filename;//声明文件名
            //以保存时间为文件名
            Date date = new Date(System.currentTimeMillis());
            SimpleDateFormat sdf = new SimpleDateFormat ("yyyyMMddHHmmss");
            filename =  sdf.format(date);
            File file = new File(extStorageDirectory, filename+".JPEG");//创建文件,第一个参数为路径,第二个参数为文件名
            try {
                    outStream = new FileOutputStream(file);//创建输入流
                    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outStream);
                    outStream.close();
    /**       这三行可以实现相册更新
                    Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
                    Uri uri = Uri.fromFile(file);intent.setData(uri);
                    sendBroadcast(intent);//这个广播的目的就是更新图库,发了这个广播进入相册就可以找到你保存的图片了!*/
                    Toast.makeText(PaintboardActivity.this,"saved",
                            Toast.LENGTH_SHORT).show();
            } catch(Exception e) {
                Toast.makeText(PaintboardActivity.this, "exception:" + e,
                        Toast.LENGTH_SHORT).show();
    
            }
        }

     

     

    展开全文
  • 在使用前 请导入photos.framework然后导入1#import #import #import方法一使用UIImageWriteToSavedPhotosAlbum函数将图片保存到相册,如:12345678- (void)loadImageFinished:(UIImage *)image{ ...

    在使用前  请导入photos.framework

    然后导入

    1
    #import #import #import

    方法一

    使用UIImageWriteToSavedPhotosAlbum函数将图片保存到相册,如:

    1
    2
    3
    4
    5
    6
    7
    8
    - (void)loadImageFinished:(UIImage *)image
    {
         UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), (__bridge void *)self);
    }
    - (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo
    {
         NSLog(@ "image = %@, error = %@, contextInfo = %@" , image, error, contextInfo);
    }

    第一个参数是要保存到相册的图片对象

    第二个参数是保存完成后回调的目标对象

    第三个参数就是保存完成后回调到目标对象的哪个方法中,方法的声明要如代码中所示的:

    1
    - (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo;

    第四个参数在保存完成后,会原封不动地传回到回调方法的contextInfo参数中。

    方法二

    使用AssetsLibrary框架中的ALAssetsLibrary类来实现。具体代码如下:

    1
    2
    3
    4
    5
    6
    7
    8
    - (void)loadImageFinished:(UIImage *)image
    {
         __block ALAssetsLibrary *lib = [[ALAssetsLibrary alloc] init];
         [lib writeImageToSavedPhotosAlbum:image.CGImage metadata:nil completionBlock:^(NSURL *assetURL, NSError *error) {
             NSLog(@ "assetURL = %@, error = %@" , assetURL, error);
             lib = nil;
         }];
    }

    使用了ALAssetsLibrary类的writeImageToSavedPhotosAlbum:metadata:completionBlock:方法实现。其中第一个参数是一个CGImageRef的对象,表示要传入的图片。第二个参数是图片的一些属性,这里没有设置所以传入nil。最后一个completionBlock是保存完成后的回调,在这个回调中可以取到保存后的图片路径以及保存失败时的错误信息。

    注意:使用该类时需要导入AssetsLibrary.framework。而且该类需要在iOS4.0以上可以使用,但是在iOS9.0之后就被标记为过时方法。官方建议使用Photos.framework中的PHPhotoLibrary进行代替,也就是下面所说的第三种方法。

    方法三

    使用Photos框架的PHPhotoLibrary类来实现保存到相册功能。代码如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    - (void)loadImageFinished:(UIImage *)image
    {
         [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
              /写入图片到相册
              PHAssetChangeRequest *req = [PHAssetChangeRequest creationRequestForAssetFromImage:image];
          } completionHandler:^(BOOL success, NSError * _Nullable error) {
              NSLog(@ "success = %d, error = %@" , success, error);
         }];
    }

    该例子中先调用PHPhotoLibrary类的performChanges:completionHandler:方法,然后在它的changeBlock中,通过PHAssetChangeRequest类的creationRequestForAssetFromImage:方法传入一个图片对象即可实现保存到相册的功能。然后completionHandler中会告诉我们是否操作成功。

    进阶使用:得到保存到相册的图片对象

    也许会有人需要在保存相册后得到图片的PHAsset对象来进行后续操作(昨天刚好碰到有朋友遇到这样的问题)。那么,这里对上面例子进行改进,在创建PHAssetChangeRequest后将它的placeholderForCreatedAsset属性的localIdentifier属性保存到一个数组中,等待操作完成后再通过这个数组来查找刚刚添加的图片对象。请看下面栗子:

    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
    - (void)loadImageFinished:(UIImage *)image
    {
         NSMutableArray *imageIds = [NSMutableArray array];
             [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
                 //写入图片到相册
                 PHAssetChangeRequest *req = [PHAssetChangeRequest creationRequestForAssetFromImage:image];
                 //记录本地标识,等待完成后取到相册中的图片对象
                 [imageIds addObject:req.placeholderForCreatedAsset.localIdentifier];
             } completionHandler:^(BOOL success, NSError * _Nullable error) {
                 NSLog(@ "success = %d, error = %@" , success, error);
                 if  (success)
                 {
                     //成功后取相册中的图片对象
                     __block PHAsset *imageAsset = nil;
                     PHFetchResult *result = [PHAsset fetchAssetsWithLocalIdentifiers:imageIds options:nil];
                     [result enumerateObjectsUsingBlock:^(PHAsset * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
                         imageAsset = obj;
                         *stop = YES;
                     }];
                     if  (imageAsset)
                     {
                         //加载图片数据
                         [[PHImageManager defaultManager] requestImageDataForAsset:imageAsset
                               options:nil
                               resultHandler:^(NSData * _Nullable imageData, NSString * _Nullable dataUTI, UIImageOrientation orientation, NSDictionary * _Nullable info) {
                                    NSLog( "imageData = %@" , imageData);
                               }];
                     }
                 }
             }];
    }

    总结

    第一种方式是最常用的,使用起来很方便,传入UIImage就可以了,也不需要担心iOS不同版本的问题。唯一缺点就是无法找到对应添加的图片。

    第二种方式是iOS4之后加入的,在iOS9后又不推荐使用了。他也提供了很直观的方式来保存图片,并且也能够取到保存后相对应的图片路径。

    第三种方式是iOS8之后加入的,他的使用稍微复杂一点,但是它允许进行批量的操作,例如添加、修改、删除等。如果要做更加复杂的操作的话,这种方式是比较推荐的方式。

    原文出自:http://www.cocoachina.com/ios/20170629/19676.html?utm_source=itdadao&utm_medium=referral

    展开全文
  • 最近做一个保存应用的图片并插入系统图库同时通知相册刷新的功能,做完后发现在部分华为和三星的手机上出现虽然图片保存成功了,但是相册却找不到图片的问题,很困惑,查找文件夹图片也已经存在,可就是在相册里...
  • 2:其中platform-tools_r30.0.5-windows.zip,文件是adb的安装文件,只需要将其解压一个特定的目录,比如解压D盘,在这个解压缩的文件中找到adb.exe的位置,比如 D:\platform-tools_r30.0.5-windows\platform-...
  • 手机照片怎么导出电脑保存?如何将图片导出电脑中进行保存呢?下面就是具体的操作方法。方法/步骤1方法:通过QQ传文件。方法:1、在手机和电脑上同时登录QQ。打开手机QQ,选择“联系人”(我的电脑)。接下来,如...
  • 微信图片保存的位置路径是什么如今,微信的普遍使用已经成为了大家日常生活的一部分。在微信上,也会常常发发图片,那么微信图片保存在哪里?为了保存原有的图片,可以查找微信图片保存路径进而保存。微信图片保存...
  • 手机评站网今天精心准备的是《怎么保存整个网页》,下面是详解!如何另存整个网页如何另存整个网页...如何另存整个网页1.在手机桌面中找到手机百度,点击打开手机百度,如下图所示。2.在手机百度中找到自己想要另存...
  • vue2.0 webApp保存图片到相册

    万次阅读 2018-11-17 13:10:30
    ios下a标签不能直接下载图片。为了兼容android和ios找到了h5plus。里面有个保存到相册的功能。 代码很简单,如下: saveImage{ if(!window.plus) return;... plus.gallery.save...保存图片到相册成功"); ...
  • @这周末的时候帮同事做个东西,就是要保存图片到手机相册并且实现双端的,我一听一脸懵逼,我一个半路出家的Unity3D和CocosCreater 程序员不懂原生啊!没办法答应了就要做到。回到正题,下面直接出代码:(注:我...
  • 图片生成后安卓端打开可以正常保存,唯独苹果手机不可以;找了很久,尝试了很多方式,最后问题在一个博客中找到:https://blog.csdn.net/sir_coding/article/details/53695187 因图片路径是采用七牛图片路径,并...
  • cordova 实现图片保存到相册功能 踩坑记录: 之前百度了很多 都有指向这几个github插件 但我引入都会在插件源码报错 导致不能打包完成; (没耐心的看插件源码 选择了放弃)可能大神们能去解决一下这个问题在使用 ...
  • 我们有时候需要将网络上的图片保存到手机方便之后查看,但是明明已经保存到本地存储,却未在相册显示,但是从“我的文件”按着路径找过去却是可以看得到的,这是什么情况呢 ? 2、解决 我们日常开发中会在手机上...
  • 可是手机相册里面找不这张图片,在文件管理里面可以找到这张图,怎么办?感觉相册就是读不出来这个软件保存的图,哭了,希望能帮帮忙,感激不尽!!手机是安卓&#...
  • 微信视频号目前支持发布 1-30 分钟的视频,以及最多 9 张的图片,即视频+图片的作品内容展示形式。 由于视频号的视频内容无法像抖音、快手一样,保存本地或者复制作品链接进行解析下载,对于喜欢的视频内容,普通...
  • 1.如题:找到微信保存图片,由资料得知微信的文件夹的目录是在tencent/MicroMsg 2.下载文件并打开,进入tencent/MicroMsg 3.因为是需要图片,尝试搜索常见图片后缀,例如这里是.png 4.找到图片图片名是...
  • 仔细思考一下,其实我们调用OC代码的部分也只有保存到相册的那一部分而已,至于截图,完全可以用Cocos2dx自带的功能,所以只要能获取renderTexture的像素信息,再在OC部分中转换为UIImage保存即可,由此诞生了最终...
  • Android中保存图片到本地功能实现

    万次阅读 2017-07-24 17:46:35
    本文描述将一个Bitmap对象保存为一个图片文件的主要步骤。保存图片文件能够立刻在系统相册和图库中找到。 我使用的是一张drawable中的图片,构造bitmap如下: Bitmap icon = BitmapFactory.decode
  • 比如我们在用app的时候,发现上面有比较的图片保存到手机,只要点一点app上提供的保存按钮就可以了。那这个图片保存到本地怎么实现的呢? 保存图片很简单,方法如下:首先默认个文件保存路径 private static final...
  • 下载图片到本地,由于没有通知系统相册,更新数据,导致系统相册没法找到这张图片。 处理方法一:已知图片保存地址,通知系统相册,通过广播 更新数据。 File imageFile = new File(imagePath); if (imageFile....
  • 下面我们怎样来找到刚刚存储MediaStore中的图片呢? 同保存到sdcard中的图片一样,我们同样要使用BitmapFactory这个类,来解析图片 如下: Bitmap bitmap=BitmapFactory.decodeStream...
  • 原来我们在保存成功后,还要发一个系统广播通知手机图片更新,广播如下: Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); Uri uri = Uri.fromFile(file); intent.setData(uri); context....
  • 软件名称:手机安卓QQ V8.4.5 正式版 for andriod 官方免费安装版软件大小:91.5MB更新时间:2020-08-31立即下载保存QQ闪照的方法:自从版本更新V6.5.8.2910之后,手机QQ就多了了一个新功能,这个新功能便是“闪照...
  • 一年没有写博客了,从ios入门熟练应该有一年的时间,最近对保存应用图片到本地相册有了新的认识,所以想分享一下。 如果是简单保存图片,而不要创建相册保存 可以下面的代码 - (IBAction)save { // 存储图片到...
  • 最初是在程序中要用到从系统相册选取图片保存到沙盒目录中,从系统相册得到 ALAsset 对象,进而取得ALAssetRepresentation 对象后保存到沙盒中得到一个图片路径。  NSString *mediaType = [asset valueFor...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 64,801
精华内容 25,920
关键字:

保存到手机的图片怎么找到