ミニプログラムへのアクセス
ミニプログラムプロジェクトへのアクセス
ステップ1:ドメイン名ホワイトリストを設定します
SDK内部はバックエンドに認証とリソースロードをリクエストします。ミニプログラムのバックエンドでドメイン名ホワイトリストの設定が必要です。
1. ミニプログラムバックエンドに移動し、開発 > 開発管理 > 開発設定 > サーバードメイン名に進みます。
2. 変更をクリックし、以下のドメイン名を設定の上、保存します。
リクエストドメイン名:
https://webar.qcloud.com;https://webar-static.tencent-cloud.com;https://aegis.qq.com;および上述の署名インターフェース(get-ar-sign)のアドレス
downloadFileドメイン名:
https://webar-static.tencent-cloud.com
ステップ2:npmのインストールと構築
1. インストール:
npm install tencentcloud-webar
2. 開発者ツールメニュー > ツール > npm構築をクリック。
3. app.jsonでworkersパスを設定:
"workers": "miniprogram_npm/tencentcloud-webar/worker"
ステップ3:ファイルの導入
// 0.3.0より前のバージョンについての参照方式(ファイル1件)// import "../../miniprogram_npm/tencentcloud-webar/lib.js";// 0.3.0およびそれより後のバージョンについての参照方法(ファイル2件+必要に応じて3dモジュールを初期化)import '../../miniprogram_npm/tencentcloud-webar/lib.js';import '../../miniprogram_npm/tencentcloud-webar/core.js';// 必要に応じて3dプラグインを初期化します。3dが必要ない場合は、参照なしにすることができます。import '../../miniprogram_npm/tencentcloud-webar/lib-3d.js';import { plugin3d } from '../../miniprogram_npm/tencentcloud-webar/plugin-3d'// ArSdkインポートimport { ArSdk } from "../../miniprogram_npm/tencentcloud-webar/index.js";
注意
ミニプログラムの単一ファイルには500kb以内という制限があります。そのためSDKは複数のjsファイルに分けて提供します。
0.3.0より後のバージョンでは、SDKに対してさらに進んだ分割を行い、新しく3Dサポートを追加しました。3Dモジュールについて必要に応じたロード方式を提供します。導入前には現在使用中のSDKのバージョン情報をご確認の上、対応する導入方式をご選択ください。
ステップ4:インスタンスの初期化
// wxml//カメラを開きます<cameradevice-position="{{'front'}}"frame-size="large" flash="off" resolution="medium"style="width: 750rpx; height: 134rpx;position:absolute;top:-9999px;"/>//sdkが処理済みの画面をリアルタイムでこのcanvas上に出力します<canvastype="webgl"canvas-id="main-canvas"id="main-canvas"style="width: 750rpx; height: 1334rpx;"></canvas>//撮影はImageDataオブジェクトをこのcanvas上に描画します<canvastype="2d"canvas-id="photo-canvas"id="photo-canvas"style="position:absolute;width:720px;height:1280px;top:-9999px;left:-9999px;"></canvas>// jsComponent({methods: {async getCanvasNode(id) {return new Promise((resolve) => {this.createSelectorQuery().select(`#${id}`).node().exec((res) => {const canvasNode = res[0].node;resolve(canvasNode);});});},//カメラ初期化のタイプasync initSdkCamera() {// 画面上のcanvasを取得すると、sdkが処理済み画面をリアルタイムでcanvas上に出力しますconst outputCanvas = await this.getCanvasNode("main-canvas");const sdk = new ArSdk({camera: {width:720,height:1280,},output: outputCanvas,loading: {enable: false,},auth: {licenseKey: LICENSE_KEY,appId: APP_ID,authFunc: authFunc},plugin3d: plugin3d // 0.3.0までのバージョンの書き方です。必要に応じて3dモジュールを初期化します。3dモジュールが不要な場合は、このパラメータを省略できます。});this.sdk = sdksdk.setBeautify({whiten: 0.2});sdk.on('created', () => {// コールバック中に業務ロジックの処理が可能です。詳しい内容については、[パラメータと方法]()をご参照ください})}}})
注意
ミニプログラムのSDK初期化前には、コンソールでのミニプログラムAPPIDの設定が必要です。
ミニプログラムの特徴はWebとは異なります。そのためミニプログラムがサポートするinputパラメータは、現在
string
タイプの画像リンクのみです。カメラ設定はWebとは異なりますので、inputパラメータは渡さず、直接cameraパラメータを設定します。ページの中に必ずcameraタグが挿入されていることが前提です。
ミニプログラムはgetOutputをサポートしていません。ご自身で1つの画面上のWEBGL canvasを渡す場合、SDKは直接このcanvasに出力します。
撮影と録画
ミニプログラムは撮影と録画機能をサポートします
SDKは幅と高さおよびbufferデータを含むオブジェクトを返します。ユーザーはご自身のページ内の2d canvasでこのデータを描画し、画像ファイルとしてエクスポートできます。
Component({...async takePhoto() {const {uint8ArrayData, width, height} = this.sdk.takePhoto(); // takePhotoで現在の画面のbufferデータを返しますconst photoCanvasNode = await this.getCanvasNode('photo-canvas');photoCanvasNode.width = parseInt(width);photoCanvasNode.height = parseInt(height);const ctx = photoCanvasNode.getContext('2d');// sdkが返したデータでImageDataオブジェクトを作成しますconst imageData = photoCanvasNode.createImageData(uint8ArrayData, width, height);// ImageDataオブジェクトをcanvas上に描画しますctx.putImageData(imageData,0,0,0,0,width,height);// canvasをローカル画像として保存しますwx.canvasToTempFilePath({canvas: photoCanvasNode,x: 0,y: 0,width: width,height: height,destWidth: width,destHeight: height,success: (res) => {// 写真をローカルに保存しますwx.saveImageToPhotosAlbum({filePath: res.tempFilePath});}})}})
注意
ミニプログラムがバックエンドに切り替わった場合、あるいはスマホの画面ロックが確認された場合には、stopRecordを呼び出して録画を停止する必要があります。停止しない場合、エラーになる可能性があります。
Component({methods: {// 録画の開始startRecord() {this.sdk.startRecord()}// 録画を終了async stopRecord() {const res = await this.sdk.stopRecord();// 録画をローカルに保存しますwx.saveVideoToPhotosAlbum({filePath: res.tempFilePath})}}})