我来为您详细介绍如何自己制作一个微信提取文案的小程序。以下是完整的实现方案:
一、技术方案选择
方案1:基于微信小程序原生开发
推荐度:★★★★★
· 开发简单,性能优秀
· 无需服务器,使用小程序云开发
· 适合个人开发者
方案2:小程序 + 自有服务器
推荐度:★★★★☆
· 功能更强劲,扩展性好
· 需要购买服务器和域名
· 适合有技术基础的开发者
—
二、基于小程序云开发的实现方案(推荐)
第一步:准备工作
1. 注册小程序
· 访问微信公众平台注册小程序账号
· 完成认证(个人或企业)
2. 安装开发工具
· 下载微信开发者工具
· 创建新的小程序项目
第二步:项目结构设计
“`
文案提取助手/
├── pages/
│ ├── index/ # 首页
│ ├── result/ # 结果页
│ └── history/ # 历史记录页
├── components/ # 组件目录
├── cloud/ # 云函数
└── utils/ # 工具函数
“`
第三步:核心功能实现
1. 首页界面 (index.wxml)
“`xml
<view>
<view>
<text>文案提取助手</text>
<text>一键提取图片中的文字内容</text>
</view>
<view>
<view bindtap=”chooseImage”>
<image src=”/images/upload-icon.png”></image>
<text>选择图片</text>
</view>
<text>支持jpg、png格式,最大10MB</text>
</view>
<!– 图片预览 –>
<view wx:if=”{{imagePath}}”>
<image src=”{{imagePath}}”></image>
<view>
<button bindtap=”extractText”>提取文案</button>
<button bindtap=”clearImage”>重新选择</button>
</view>
</view>
<!– 加载状态 –>
<view wx:if=”{{loading}}”>
<text>正在提取文字中…</text>
</view>
</view>
“`
2. 逻辑代码 (index.js)
“`javascript
Page({
data: {
imagePath: '',
loading: false
},
// 选择图片
chooseImage: function() {
const that = this;
wx.chooseImage({
count: 1,
sizeType: ['compressed'],
sourceType: ['album', 'camera'],
success: function(res) {
that.setData({
imagePath: res.tempFilePaths[0]
});
}
});
},
// 提取文字
extractText: function() {
const that = this;
const filePath = this.data.imagePath;
if (!filePath) {
wx.showToast({
title: '请先选择图片',
icon: 'none'
});
return;
}
that.setData({ loading: true });
// 调用云函数进行OCR识别
wx.cloud.callFunction({
name: 'ocrText',
data: {
filePath: filePath
},
success: function(res) {
that.setData({ loading: false });
const text = res.result.text;
// 跳转到结果页面
wx.navigateTo({
url: `/pages/result/result?text=${encodeURIComponent(text)}&imagePath=${filePath}`
});
},
fail: function(error) {
that.setData({ loading: false });
wx.showToast({
title: '识别失败,请重试',
icon: 'none'
});
console.error('OCR识别失败:', error);
}
});
},
// 清除图片
clearImage: function() {
this.setData({
imagePath: ''
});
}
});
“`
3. 云函数实现 (cloud/ocrText/index.js)
“`javascript
const cloud = require('wx-server-sdk');
cloud.init();
// 腾讯云OCR服务调用
async function callTencentOCR(fileContent) {
// 这里需要配置腾讯云OCR的密钥
// 实际开发中提议将密钥存储在云开发环境中
const tencentcloud = require(“tencentcloud-sdk-nodejs”);
const OcrClient = tencentcloud.ocr.v20181119.Client;
const clientConfig = {
credential: {
secretId: process.env.TENCENT_SECRET_ID,
secretKey: process.env.TENCENT_SECRET_KEY,
},
region: “ap-beijing”,
profile: {
httpProfile: {
endpoint: “ocr.tencentcloudapi.com”,
},
},
};
const client = new OcrClient(clientConfig);
const params = {
ImageBase64: fileContent.toString('base64')
};
try {
const response = await client.GeneralBasicOCR(params);
return response.TextDetections.map(item => item.DetectedText).join('
');
} catch (error) {
throw new Error(`OCR识别失败: ${error.message}`);
}
}
exports.main = async (event, context) => {
try {
// 获取上传的图片文件
const res = await cloud.downloadFile({
fileID: event.filePath
});
const fileContent = res.fileContent;
// 调用OCR服务
const text = await callTencentOCR(fileContent);
return {
success: true,
text: text
};
} catch (error) {
return {
success: false,
error: error.message
};
}
};
“`
4. 结果页面 (result.wxml)
“`xml
<view>
<view>
<text>提取结果</text>
</view>
<view>
<image src=”{{imagePath}}”></image>
</view>
<view>
<textarea value=”{{extractedText}}” auto-height readonly></textarea>
</view>
<view>
<button bindtap=”copyText”>复制文案</button>
<button bindtap=”saveToHistory”>保存记录</button>
<button bindtap=”shareResult”>分享结果</button>
<button bindtap=”backToHome”>继续提取</button>
</view>
</view>
“`
5. 结果页面逻辑 (result.js)
“`javascript
Page({
data: {
extractedText: '',
imagePath: ''
},
onLoad: function(options) {
this.setDa

















暂无评论内容