testCameraAuto.nvue 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. <template>
  2. <div class="container">
  3. <view class="show-view">
  4. <!-- Camera 组件 -->
  5. <Ba-CameraView ref="cameraView" class="camera-view" :load="cameraOptions" @load="onCameraLoad"></Ba-CameraView>
  6. </view>
  7. <!-- 控制按钮 -->
  8. <div class="controls">
  9. <button class="btn" @click="toggleAutoZoom">
  10. {{ autoZoomEnabled ? '关闭自动变焦' : '开启自动变焦' }}
  11. </button>
  12. <button class="btn" @click="switchZoomMode">
  13. 切换模式: {{ currentMode }}
  14. </button>
  15. <button class="btn" @click="manualZoom">手动变焦</button>
  16. <button class="btn" @click="takePicture">拍照</button>
  17. </div>
  18. <!-- 状态显示 -->
  19. <div class="status">
  20. <text class="status-text">自动变焦: {{ autoZoomEnabled ? '开启' : '关闭' }}</text>
  21. <text class="status-text">变焦模式: {{ currentMode }}</text>
  22. <text class="status-text">{{ statusMessage }}</text>
  23. </div>
  24. </div>
  25. </template>
  26. <script>
  27. export default {
  28. data() {
  29. return {
  30. autoZoomEnabled: true,
  31. currentMode: 'FACE',
  32. statusMessage: '相机初始化中...',
  33. cameraOptions: {
  34. isToast: true,
  35. isShowVibrate: true,
  36. isShowBeep: true,
  37. zoom: true,
  38. captureQuality: 'HIGH',
  39. autoZoomEnabled: true,
  40. autoZoomMode: 'FACE'
  41. }
  42. }
  43. },
  44. methods: {
  45. onReady() {
  46. this.setListener(); //设置监听
  47. //this.$refs.cameraView.setCaptureQuality("MEDIUM"); 动态设置清晰度
  48. //this.$refs.cameraView.setAutoZoom(true, "TONGUE"); // 启用自动变焦
  49. //this.$refs.cameraView.performAutoZoom(); // 手动触发变焦
  50. //this.$refs.cameraView.setAutoZoom(false); // 禁用自动变焦
  51. },
  52. onCameraLoad() {
  53. this.statusMessage = '相机加载完成,自动变焦已启用';
  54. console.log('Camera loaded with auto zoom enabled');
  55. },
  56. toggleAutoZoom() {
  57. this.autoZoomEnabled = !this.autoZoomEnabled;
  58. this.$refs.cameraView.setAutoZoom((result) => {
  59. if (result.ok) {
  60. this.statusMessage = this.autoZoomEnabled ? '自动变焦已开启' : '自动变焦已关闭';
  61. console.log('Auto zoom toggled:', this.autoZoomEnabled);
  62. } else {
  63. this.statusMessage = '设置自动变焦失败: ' + result.msg;
  64. console.error('Failed to toggle auto zoom:', result.msg);
  65. }
  66. }, {
  67. enabled: this.autoZoomEnabled,
  68. mode: this.currentMode
  69. });
  70. },
  71. switchZoomMode() {
  72. // 在 FACE、TONGUE、DEFAULT 之间切换
  73. const modes = ['FACE', 'TONGUE', 'DEFAULT'];
  74. const currentIndex = modes.indexOf(this.currentMode);
  75. this.currentMode = modes[(currentIndex + 1) % modes.length];
  76. if (this.autoZoomEnabled) {
  77. this.$refs.cameraView.setAutoZoom((result) => {
  78. if (result.ok) {
  79. this.statusMessage = `变焦模式已切换到: ${this.currentMode}`;
  80. console.log('Zoom mode switched to:', this.currentMode);
  81. } else {
  82. this.statusMessage = '切换变焦模式失败: ' + result.msg;
  83. console.error('Failed to switch zoom mode:', result.msg);
  84. }
  85. }, {
  86. enabled: this.autoZoomEnabled,
  87. mode: this.currentMode
  88. });
  89. } else {
  90. this.statusMessage = `变焦模式已设置为: ${this.currentMode} (需开启自动变焦)`;
  91. }
  92. },
  93. manualZoom() {
  94. this.$refs.cameraView.performAutoZoom((result) => {
  95. if (result.ok) {
  96. this.statusMessage = '手动变焦执行成功';
  97. console.log('Manual zoom performed successfully');
  98. } else {
  99. this.statusMessage = '手动变焦失败: ' + result.msg;
  100. console.error('Manual zoom failed:', result.msg);
  101. }
  102. });
  103. },
  104. takePicture() {
  105. const timestamp = new Date().getTime();
  106. const fileName = `camera_test_${timestamp}.jpg`;
  107. this.$refs.cameraView.takePicture((result) => {
  108. if (result.ok) {
  109. this.statusMessage = `拍照成功: ${fileName}`;
  110. console.log('Picture taken successfully:', fileName);
  111. } else {
  112. this.statusMessage = '拍照失败: ' + result.msg;
  113. console.error('Failed to take picture:', result.msg);
  114. }
  115. }, {
  116. path: fileName,
  117. isFull: true
  118. });
  119. },
  120. setListener() {
  121. this.$refs.cameraView.setListener((res) => {
  122. if (res.action == "error") {
  123. this.showToast(res.msg)
  124. }
  125. });
  126. },
  127. }
  128. }
  129. </script>
  130. <style>
  131. .container {
  132. flex: 1;
  133. background-color: #f5f5f5;
  134. padding: 20px;
  135. }
  136. .title {
  137. font-size: 24px;
  138. font-weight: bold;
  139. text-align: center;
  140. margin-bottom: 20px;
  141. color: #333;
  142. }
  143. .show-view {
  144. flex-direction: row;
  145. }
  146. .camera-view {
  147. width: 750rpx;
  148. height: 800rpx;
  149. background-color: #333333;
  150. }
  151. .controls {
  152. flex-direction: column;
  153. align-items: center;
  154. margin-bottom: 20px;
  155. }
  156. .btn {
  157. width: 200px;
  158. height: 50px;
  159. background-color: #007AFF;
  160. color: #fff;
  161. border-radius: 25px;
  162. margin-bottom: 10px;
  163. font-size: 16px;
  164. text-align: center;
  165. line-height: 50px;
  166. }
  167. .btn:active {
  168. background-color: #0056CC;
  169. }
  170. .status {
  171. flex-direction: column;
  172. align-items: center;
  173. padding: 15px;
  174. background-color: #fff;
  175. border-radius: 10px;
  176. border: 1px solid #ddd;
  177. }
  178. .status-text {
  179. font-size: 14px;
  180. color: #666;
  181. margin-bottom: 5px;
  182. text-align: center;
  183. }
  184. </style>