微信JS-SDK選択画像で出会った穴


WeChat企業番号の中で開発する必要があります。機能は写真を選ぶことです。inputタグを使うと使えなくなります。Android携帯は複数選択できないので、WeChatを使ったJS-SDKが提供するAPIに関して、この場所は本当にピットがあります。記録してください。文書によって直接jsファイルを導入すればいいです。Vueならweixin-js-sdkも使えます。両方ともいいです。
画像はAndroidではプレビューできません。
js-sdkのchooseImage インターフェースが返ってきた結果、localIdはwxLocalResource://xxxxxxと似ています。base 64列を得るにはgetLocalImgData方法を再起動する必要があります。バックグラウンドインターフェースにはこのbase 64列が必要ですので、このインターフェースを通じてbase 64列を展示します。ドキュメントで紹介した方法ではなくてください。ここにはAndroidから取得したlocalDataはbase 64のプレフィックスがないピットがあります。処理してください。

selectImage: function () {
  let context = this;
  wx.chooseImage({
    count: 9,
    sizeType: ['compressed'], 
    sourceType: ['album', 'camera'], 
    defaultCameraMode: "normal", 
    success: function (res) {
      // localIds  data      localId  
      context.localIds = res.localIds;
      //           
      context.updateBase64Data(context.localIds.shift());
    },
    fail: function (res) {
      alert('      :' + res.errMsg);
    },
  });
},
updateBase64Data: function (localId) {
  let context = this;
  wx.getLocalImgData({
    localId: localId, //    localID
    success: function (res) {
      let localData = res.localData;
      let prefix = 'base64,';
      let index = localData.indexOf(prefix);
      let actData = localData;
      //         ,               data:image/jpeg;base64,
      if (index > -1) {
        actData = localData.substring(index + 7);
      }
      // base64Array  data      base64   
      context.base64Array.push(actData);
      
      if (context.localIds.length > 0) {
        context.updateBase64Data(context.loaclIds.shift());
      } else {
        //     
      }
    },
    fail: function (res) {
      alert('      :' + res.errMsg);
    },
  });
},
get LocalImgDataは複数の画像を取得しても応答がありません。chooseImage方法はlocalIdの配列であり、直接的にこの配列を巡回してgetLocalImgDataを呼び出すと一回だけ実行されます。後ろのはどうしても実行されません。これはlocalIdの取得と関係があると推測されます。したがって、上記のコードで再帰的に呼び出し、画像をアップロードする際にもuploadImageを連続的に呼び出します。
Androidは原図が選択できません。
choseImage法ではsourceTypeフィールドで原図か圧縮後の図かを指定できますが、get LocalImgDataメソッドを呼び出したら、取得したbase 64列のディスプレイはきっとぼやけています。Androidの上で原図は使えないと思いますか?間違っています。IOSの上の図をよく見ても分かりません。テストで発見したのは確かです。元の図1.8 Mで、js-sdkを使って選択した原図は240 Kまでしかないです。どうしてAndroidはぼやけていますが、IOSははっきりしていますか?これはIOSとAndroidシステムの違いではないと思いますか?同じ画像をget LocalImgData法で取得したbase 64列を比較してみると、Androidで得られたbase 64列のプレフィックスはgCMで始まるが、IOSは/9 j/先頭でPCで選択した図も/9 j/先頭で、自分で解析したピクチャも/9 j/先頭であるので、圧縮でぼやけているのではなく、あいまいな符号化を使用しているためである。もし原図を選択したいなら、まず画像をWeChatサーバーにアップロードして、それから臨時素材を取得するインターフェースhttps://qyapi.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_IDを使って、写真をダウンロードして、テストした後、実は圧縮があります。これは企業番号のAPIです。公衆番号の住所はhttps://api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_IDです。コードは貼りません。上の基本と一致します。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。