微信开发分享图片_android开发微信分享图片 - CSDN
  • 我是在项目中用微信SDK分享图片的连接,如下:    发现有的连接可以正常分享有的却不行,wechat_api.sendReq(req);返回false  微信官方傻X文档是这样描述的:    然后我就表示很不理解了。 ...


        我是在项目中用微信SDK分享带图片的连接,如下:

        

        发现有的连接可以正常分享有的却不行,wechat_api.sendReq(req);返回false

        微信官方傻X文档是这样描述的:

        

        然后我就表示很不理解了。

        后来在微信SDK网站乱逛的时候发现了这么一条:

    Q:为什么使用微信SDK分享信息给微信好友,有的消息发送成功,有的消息发送失败(打不开微信)?(New)

    A:这是因为SDK协议中对缩略图的大小作了限制,大小不能超过32K。另外限制的还有title、description等参数的大小。iOS开发者请在微信开放平台网站iOS手册搜索“thumbData”, Android开发者请见微信开放平台网站Android手册的“WXMediaMessage”页面。

        。。。靠,你在文档里写一下会死啊!建议每个微信的开发者都看看这个页面:http://open.weixin.qq.com/faq/?lang=zh_CN

        好的,原因是我分享的缩略图超过了32k,那就压缩吧。

     

    ==============

    因为我用的是png的图片,在stackoverflow上发现Bitmap的compress方法不支持PNG,只支持JPG。各种尝试之后放弃了使用Bitmap的compress方法。

    最后改用直接压缩分辨率,但是这样不完美的地方在于我把超过32k的图片全部改为99*99的,会丢掉部分细节。不知道有没有人可以提供更完美的方式。

    [java] view plaincopy
    1. public Bitmap createBitmapThumbnail(Bitmap bitMap) {  
    2.     int width = bitMap.getWidth();  
    3.     int height = bitMap.getHeight();  
    4.     // 设置想要的大小  
    5.     int newWidth = 99;  
    6.     int newHeight = 99;  
    7.     // 计算缩放比例  
    8.     float scaleWidth = ((float) newWidth) / width;  
    9.     float scaleHeight = ((float) newHeight) / height;  
    10.     // 取得想要缩放的matrix参数  
    11.     Matrix matrix = new Matrix();  
    12.     matrix.postScale(scaleWidth, scaleHeight);  
    13.     // 得到新的图片  
    14.     Bitmap newBitMap = Bitmap.createBitmap(bitMap, 00, width, height,  
    15.             matrix, true);  
    16.     return newBitMap;  
    17. }  

     

    =======另附上Android上图片压缩方式=======

    第一:我们先看下质量压缩方法:

     

    [java] view plaincopy
    1. private Bitmap compressImage(Bitmap image) {  
    2.   
    3.         ByteArrayOutputStream baos = new ByteArrayOutputStream();  
    4.         image.compress(Bitmap.CompressFormat.JPEG, 100, baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中  
    5.         int options = 100;  
    6.         while ( baos.toByteArray().length / 1024>100) {  //循环判断如果压缩后图片是否大于100kb,大于继续压缩         
    7.             baos.reset();//重置baos即清空baos  
    8.             image.compress(Bitmap.CompressFormat.JPEG, options, baos);//这里压缩options%,把压缩后的数据存放到baos中  
    9.             options -= 10;//每次都减少10  
    10.         }  
    11.         ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());//把压缩后的数据baos存放到ByteArrayInputStream中  
    12.         Bitmap bitmap = BitmapFactory.decodeStream(isBm, nullnull);//把ByteArrayInputStream数据生成图片  
    13.         return bitmap;  
    14.     }  


    第二:图片按比例大小压缩方法(根据路径获取图片并压缩):

     

    [java] view plaincopy
    1. private Bitmap getimage(String srcPath) {  
    2.         BitmapFactory.Options newOpts = new BitmapFactory.Options();  
    3.         //开始读入图片,此时把options.inJustDecodeBounds 设回true了  
    4.         newOpts.inJustDecodeBounds = true;  
    5.         Bitmap bitmap = BitmapFactory.decodeFile(srcPath,newOpts);//此时返回bm为空  
    6.           
    7.         newOpts.inJustDecodeBounds = false;  
    8.         int w = newOpts.outWidth;  
    9.         int h = newOpts.outHeight;  
    10.         //现在主流手机比较多是800*480分辨率,所以高和宽我们设置为  
    11.         float hh = 800f;//这里设置高度为800f  
    12.         float ww = 480f;//这里设置宽度为480f  
    13.         //缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可  
    14.         int be = 1;//be=1表示不缩放  
    15.         if (w > h && w > ww) {//如果宽度大的话根据宽度固定大小缩放  
    16.             be = (int) (newOpts.outWidth / ww);  
    17.         } else if (w < h && h > hh) {//如果高度高的话根据宽度固定大小缩放  
    18.             be = (int) (newOpts.outHeight / hh);  
    19.         }  
    20.         if (be <= 0)  
    21.             be = 1;  
    22.         newOpts.inSampleSize = be;//设置缩放比例  
    23.         //重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了  
    24.         bitmap = BitmapFactory.decodeFile(srcPath, newOpts);  
    25.         return compressImage(bitmap);//压缩好比例大小后再进行质量压缩  
    26.     }  


    第三:图片按比例大小压缩方法(根据Bitmap图片压缩):

     

    [java] view plaincopy
    1. private Bitmap comp(Bitmap image) {  
    2.       
    3.     ByteArrayOutputStream baos = new ByteArrayOutputStream();         
    4.     image.compress(Bitmap.CompressFormat.JPEG, 100, baos);  
    5.     if( baos.toByteArray().length / 1024>1024) {//判断如果图片大于1M,进行压缩避免在生成图片(BitmapFactory.decodeStream)时溢出    
    6.         baos.reset();//重置baos即清空baos  
    7.         image.compress(Bitmap.CompressFormat.JPEG, 50, baos);//这里压缩50%,把压缩后的数据存放到baos中  
    8.     }  
    9.     ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());  
    10.     BitmapFactory.Options newOpts = new BitmapFactory.Options();  
    11.     //开始读入图片,此时把options.inJustDecodeBounds 设回true了  
    12.     newOpts.inJustDecodeBounds = true;  
    13.     Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, newOpts);  
    14.     newOpts.inJustDecodeBounds = false;  
    15.     int w = newOpts.outWidth;  
    16.     int h = newOpts.outHeight;  
    17.     //现在主流手机比较多是800*480分辨率,所以高和宽我们设置为  
    18.     float hh = 800f;//这里设置高度为800f  
    19.     float ww = 480f;//这里设置宽度为480f  
    20.     //缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可  
    21.     int be = 1;//be=1表示不缩放  
    22.     if (w > h && w > ww) {//如果宽度大的话根据宽度固定大小缩放  
    23.         be = (int) (newOpts.outWidth / ww);  
    24.     } else if (w < h && h > hh) {//如果高度高的话根据宽度固定大小缩放  
    25.         be = (int) (newOpts.outHeight / hh);  
    26.     }  
    27.     if (be <= 0)  
    28.         be = 1;  
    29.     newOpts.inSampleSize = be;//设置缩放比例  
    30.     //重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了  
    31.     isBm = new ByteArrayInputStream(baos.toByteArray());  
    32.     bitmap = BitmapFactory.decodeStream(isBm, null, newOpts);  
    33.     return compressImage(bitmap);//压缩好比例大小后再进行质量压缩  
    34. }  
    展开全文
  • http://www.cnblogs.com/stoneniqiu/p/6286599.htmlhttps://www.cnblogs.com/zhengxu/articles/6743301.html这是微信分享的文章,如果小伙伴正在做这个功能的话,可以参看一下,希望对你有帮助。...

    http://www.cnblogs.com/stoneniqiu/p/6286599.html

    https://www.cnblogs.com/zhengxu/articles/6743301.html

    https://blog.csdn.net/xMric/article/details/80594210

    这是微信分享的文章,如果小伙伴正在做这个功能的话,可以参看一下,希望对你有帮助。

    展开全文
  • 最近一个项目做的源生微信分享,测试出现问题的可以分享出去, 发现有的可以分享出去有的不能分享出去 想半天想不出来,过了两天突然感觉是不是分享图片太大了,  顿时就恍然大悟,原来我从网络上请求的图片转换成...

     

    最近一个项目做的源生微信分享,测试出现问题的可以分享出去, 发现有的可以分享出去有的不能分享出去
    想半天想不出来,过了两天突然感觉是不是分享的图片太大了, 
    顿时就恍然大悟,原来我从网络上请求的图片转换成Bitmap就没有管了,直接就分享出去,难怪有的可以分享,有的又不可以, 

     

    后来查了一下,图片好像要限制在32k以下才能分享,微信这个坑比也没说。

     

    下面就是我把网络图片url转换成Bitmap然后在设置缩略图的方法 

    1:首先定义一个接口:因为是从网络上获取的ImageUrl,这里使用接口回调

            下面的是解析本地图片,我们知道解析本地的图片时比较简单的只需要如下一行代码就可以了,如下一行代码:

     

    Bitmap thumb = BitmapFactory.decodeResource(getResources(), R.drawable.img_customeravatar);

          这下面是处理网络图片URL定义的接口。

    //自定义一个接口
    public interface HttpCallBackListener {
        void onFinish(Bitmap bitmap);
        void onError(Exception e);
    }

    2:这里进行网络URL转换成Bitmap对象的方法:

    /**
     * bitmap转换
     * @param
     * @return
     */
    public void getImage(final String path, final HttpCallBackListener listener) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                URL imageUrl = null;
                try {
                    imageUrl = new URL(path);
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                }
                try {
                    HttpURLConnection conn = (HttpURLConnection) imageUrl.openConnection();
                    conn.setDoInput(true);
                    conn.connect();
                    InputStream is = conn.getInputStream();
                    Bitmap bitmap = BitmapFactory.decodeStream(is);
                    Bitmap bitmap1= createBitmapThumbnail(bitmap,false);
                    if (listener != null) {
                        listener.onFinish(bitmap1);
                    }
                    is.close();
                } catch (IOException e) {
                    if (listener != null) {
                        listener.onError(e);
                    }
                    e.printStackTrace();
                }
            }

        下面的方法是把获取的Bitmap图片变小,压缩到32K以下。 

    (这里最重要的也是这个问题的核心利用该方法把Bitmap变小)
            public Bitmap createBitmapThumbnail(Bitmap bitmap,boolean needRecycler){
                int width=bitmap.getWidth();
                int height=bitmap.getHeight();
                int newWidth=80;
                int newHeight=80;
                float scaleWidth=((float)newWidth)/width;
                float scaleHeight=((float)newHeight)/height;
                Matrix matrix=new Matrix();
                matrix.postScale(scaleWidth,scaleHeight);
                Bitmap newBitMap=Bitmap.createBitmap(bitmap,0,0,width,height,matrix,true);
                if(needRecycler)bitmap.recycle();
                return newBitMap;
            }
        }).start();
    
    
    }
    3:最后在微信分享的方法里面调用就OK了!

     

    private void shareWebToWeixin(final String webUrl) {
    
        if (!MallApplication.mWxApi.isWXAppInstalled()) {
            ToastUtil.toast(您还未安装微信客户端);
            return;
        }
    
        if (!NetUtil.IsActivityNetWork(GoodsDetailActivity.this)) {
            ToastUtil.toast("请检查您的网络连接");
            return;
        }
    
     (从这里开始实现分享)
        getImage(gd.getImgUrl().get(0), new HttpCallBackListener() {
            @Override
            public void onFinish(final Bitmap bitmap) {
               final Bitmap bitmap1=bitmap;
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        WXWebpageObject webpage = new WXWebpageObject();
                        webpage.webpageUrl = webUrl;
                        final WXMediaMessage msg = new WXMediaMessage(webpage);
                        //新加上去的
                        msg.title = gd.getName();
                        //新加上去的
                        msg.description = gd.getDescription();
                        msg.setThumbImage(bitmap);
                        SendMessageToWX.Req req = new SendMessageToWX.Req();
                        req.transaction = "webpage";
                        req.message = msg;
                        req.scene = SendMessageToWX.Req.WXSceneSession;
                        MallApplication.mWxApi.sendReq(req);
                    }
                });
            }
    
            @Override
            public void onError(Exception e) {
                e.printStackTrace();
            }
        });
    
        //原来的
        //Bitmap thumb = BitmapFactory.decodeResource(getResources(), R.drawable.img_customeravatar);
        // msg.setThumbImage(thumbs);
    }

     

     

     

    展开全文
  • 前段时间由于工作需要有几个H5活动页要在微信分享到朋友圈,分享给朋友,但是发现分享出去的都是系统默认的图片和默认的document.title,那么想要自定义这部分内容,就需要看微信公众平台的开发文档 点击打开微信...

    前段时间由于工作需要有几个H5活动页要在微信上分享到朋友圈,分享给朋友,但是发现分享出去的都是系统默认的图片和默认的document.title,那么想要自定义这部分内容,就需要看微信公众平台的开发文档

    点击打开微信公众平台开发文档




    1.首先要分享的H5页面的域名需要微信公众账号在设置里填写”JS接口安全域名“,绑定域名才能获得接口使用权限;



    2.在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.2.0.js



    3.

    wx.config({
        debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
        appId: '', // 必填,公众号的唯一标识
        timestamp: , // 必填,生成签名的时间戳
        nonceStr: '', // 必填,生成签名的随机串
        signature: '',// 必填,签名,见附录1
        jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
    });
    
    
    
    

    下面贴出我的代码,由于这几项必填的参数我都是从后台获取来的,所以多了一步请求数据的过程,可忽略,

    调试的时候debug设置成true 可在移动设备上alert出错误信息,遇到过一次一直说签名错误的问题,原因是由于后

    台不能动态获取前台页面的地址,为什么要动态获取,因为地址栏后面传参数了,每次都不一样的,后来解决方法就

    变成我在请求数据的时候把当前地址一并传给后台,后台再根据这个地址绑定域名,大概是这个意思,我代码里只写

    了分享至朋友圈的接口,如果你需要分享到QQ,或者分享给朋友,只需要把相应的微信接口填进去就行了,其他没

    什么不同,最后记得调用我图中的getMsg方法就可以了




    展开全文
  • android之微信分享图片

    千次阅读 2017-12-23 20:51:00
    android之微信分享图片 微信图像分享分为三类1、二进制图片2、本地图片3、URL地址图片 XML分析:三个Button 添加点击事件! 注意清单文件 权限 uses-permission android:name="android.permission.INTERNET"/>...
  • Android 布局生成微信分享图片

    热门讨论 2020-07-29 11:04:41
    Android 布局生成微信分享图片,需要的小伙伴们可以下载看看!我们互相学习!!
  • 初次尝试微信公众号的开发,对于学习方法的探索都是来源于网上的博客、问答,对于参差不齐的信息,自己也是有苦说不出,抽出一点时间写点文章,既是对自己的学习总结,也希望给予同是菜鸟的学渣一点帮助。...
  • 直接贴代码吧 ...微信分享正常连接 WXWebpageObject webpage = new WXWebpageObject(); webpage.webpageUrl = string; WXMediaMessage msg = new WXMediaMessage(webpage); msg.title = "标题"; msg...
  • 微信开发(二)--上传图片和附件

    千次阅读 2018-06-22 11:11:36
    今天整理一下微信开发中遇到的图片和附件的上传问题。 开发环境参考:微信开发(一)--分享接口 点击打开链接 由于是基于weixin-java-tools 封装的java sdk,所以在微信底层处理上我们可以直接调用WxMpService. ...
  • 求教android使用微信分享图片给好友,怎样设置点击图片跳转链接而不是查看大图。 看到gif快手能够实现,但是微信开发文档中没有相关说明,求高手指教。
  • Android微信分享图片大于32k进行压缩

    千次阅读 2015-07-09 16:16:47
    微信分享视频的时候,需要传一个图片数组,大小不能大于32k。 解决方案:使用Bitmap自带的compress方法解决了这个问题. 源码如下: package com.example.test; import java.io.ByteArrayOutputStream; import ...
  • 微信分享图片,描述(php版)

    千次阅读 2019-02-19 15:09:37
    最近在为一个php网站添加微信分享图片,描述的功能,这个功能之前了解过,但并没有彻底实现过,这个功能需要认证的公众号支持。 第一步:在已经认证的公众号配置安全域名(网上很多教程) 第二步:在微信公众平台...
  • 在集成微信分享的过程中,如果缩略图是url形式,或者大图分享图片是个url,就需要我们先把图片下载下来,然后依据微信的要求对图片做一些压缩操作,最后将图片的数据设置给要分享的对象即可。 我们一般需要支持的...
  • 考虑到模板样式的多端一致性、多样性、可配置性等特点,所以生成分享图片的功能有java服务端进行实现。刚开始接到任务的时候,想着这么简单的东西,应该很快就能完成,于是保守的估计了一天用来开发此功能;2.二维码...
  • 严格来说 如果只是分享图片的话 就不要写thum 这是个坑
  • 首先要做微信公众号分享,必须要关注这个微信公众号,这是重点。 我的项目是vue的项目在项目中安装了微信jssdk,然后引用微信的jssdk。调用里面的方法。方法如下图代码,我分享的的页面不是当前页面,而是同一个...
  • Android 微信分享图片!!!

    千次阅读 2016-12-14 10:39:46
    然后将jar包导入项目 ,可参考微信开发文档,然后有文档了,为什么还要写这个文章?对吧  我只能吐槽,写开发文档的人太懒了.,好多没写明白 private String APP_ID = "00000000000000000"; //微信 APPID private ...
  • 在做h5页面分享时,用到了微信的自定义分享js-sdk 。 有时会不显示自定义的图片和描述。分步骤检查出现的问题: 调用config 接口的时候传入参数 debug: true 可以开启debug模式,页面会alert出错误信息。以下为...
  • 问题描述:集成了第三方分享之后,点击微信可能会出现不跳转的情况,没有任何提示。很可能是因为要分享图片超过了32K,这是该死的微信自己做的限制。
  • 最近项目中的网页通过微信分享朋友或朋友圈等功能出现了无法显示分享图片等信息,后经过排查发现是微信版本升级导致,采用js-sdk完成分享接口,为了快速实现该功能效果,于是我打算通过前台js进行实现来看看分享效果...
1 2 3 4 5 ... 20
收藏数 32,989
精华内容 13,195
关键字:

微信开发分享图片