You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地图片经Canvas灰度缩放后如何提交到ocr.space实现OCR识别

前端改造实现方案

第一步:修改前端JS逻辑

你需要在原有canvas绘制逻辑后补充2部分功能:灰度处理、canvas转文件上传。修改后的完整JS代码如下:

var imageLoader = document.getElementById('imageLoader');
var uploadBtn = document.getElementById('uploadBtn');
var canvas = document.getElementById('imageCanvas');
var ctx = canvas.getContext('2d');
var processedBlob = null; // 存储处理后的图片blob

imageLoader.addEventListener('change', handleImage, false);
uploadBtn.addEventListener('click', uploadProcessedImage, false);

function handleImage(e){
    var reader = new FileReader();
    reader.onload = function(event){
        var img = new Image();
        img.onload = function(){
            canvas.width = 800;
            canvas.height = 600;
            // 先绘制缩放后的图片
            ctx.drawImage(img, 0, 0, 800, 600);
            // 灰度处理逻辑
            const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
            const data = imageData.data;
            for (let i = 0; i < data.length; i += 4) {
                const gray = data[i] * 0.299 + data[i + 1] * 0.587 + data[i + 2] * 0.114;
                data[i] = gray; // R
                data[i + 1] = gray; // G
                data[i + 2] = gray; // B
            }
            ctx.putImageData(imageData, 0, 0);
            // 转成Blob存储,第二个参数是图片格式,第三个是质量0-1
            canvas.toBlob(function(blob) {
                processedBlob = blob;
            }, 'image/jpeg', 0.85);
        }
        img.src = event.target.result;
    }
    reader.readAsDataURL(e.target.files[0]);     
}

// 上传处理后的图片函数
function uploadProcessedImage() {
    if (!processedBlob) {
        alert('请先选择图片并等待处理完成');
        return;
    }
    // 构造FormData,对应后端接收的字段名attachment
    const formData = new FormData();
    formData.append('attachment', processedBlob, 'processed.jpg');
    formData.append('submit', '1'); // 对应后端isset($_POST['submit'])的判断
    
    // 发送请求到你的PHP后端
    fetch('替换为你的PHP后端接口地址', {
        method: 'POST',
        body: formData
    }).then(res => res.text())
    .then(result => {
        // 后端返回的是OCR结果页面,直接写入当前页面即可
        document.write(result);
    }).catch(err => {
        console.error('上传失败', err);
    })
}

第二步:修改前端HTML代码

新增上传按钮,修改后完整HTML如下:

<html>
    <head>
        <title>上传图片做OCR识别</title>
    </head>
    <body>
        <label>Image File:</label><br/>
        <input type="file" id="imageLoader" name="imageLoader"/><br>
        <button type="button" id="uploadBtn">提交识别</button><br>
        <canvas id="imageCanvas" name="imageCanvas"></canvas>
    </body>
</html>

注意事项

  • 后端代码不需要做任何修改,只要保证前端fetch的地址和你PHP文件的部署地址一致即可
  • 可以调整canvas.toBlob里的质量参数,控制生成的图片大小不超过后端限制的990KB
  • 灰度处理代码可以根据实际识别效果调整参数,不需要的话直接删掉对应逻辑即可

内容的提问来源于stack exchange,提问作者chrpust

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 05:18:03