微信JS-SDK選択画像で出会った穴
WeChat企業番号の中で開発する必要があります。機能は写真を選ぶことです。inputタグを使うと使えなくなります。Android携帯は複数選択できないので、WeChatを使ったJS-SDKが提供するAPIに関して、この場所は本当にピットがあります。記録してください。文書によって直接jsファイルを導入すればいいです。Vueなら
画像はAndroidではプレビューできません。
js-sdkの
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です。コードは貼りません。上の基本と一致します。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。
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です。コードは貼りません。上の基本と一致します。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。