【问题标题】:Using jQuery jcrop plugin to upload photo from webcam is wrong size.?使用 jQuery jcrop 插件从网络摄像头上传照片大小错误。?
【发布时间】:2012-12-12 03:47:16
【问题描述】:

我正在尝试使用网络摄像头拍照,使用 jcrop jquery 库对其进行裁剪,然后将裁剪后的照片上传到服务器。无论缩略图的大小如何,它始终以 300 像素的宽度和 150 像素的高度结束。

对于网络摄像头照片捕获,我一直在使用 jQuery 网络摄像头插件:http://www.xarg.org/project/jquery-webcam-plugin/。我也试过一个使用 getusermedia https://github.com/MrSwitch/jquery.getUserMedia.js.

仅上传网络摄像头快照可以正常工作并且是预期大小。

我的javascript:

$('#canvas').Jcrop({
        boxWidth: 320,
        boxHeight: 240,
        onChange:   updatePreview,
        onSelect:   updatePreview,
        addClass: 'jcrop-dark',
        aspectRatio : 1},function(){
    jcrop_api = this;
 });

 function showPreview(coords)
{
    var rx = 100 / coords.w;
    var ry = 100 / coords.h;

    $('#preview').css({
        width: Math.round(rx * 320) + 'px',
        height: Math.round(ry * 240) + 'px',
        marginLeft: '-' + Math.round(rx * coords.x) + 'px',
        marginTop: '-' + Math.round(ry * coords.y) + 'px'
    });
}

function updatePreview(c) {
    if(parseInt(c.w) > 0) {
        // Show image preview
        var imageObj = $("#canvas")[0];
        var canvas = $("#preview")[0];
        var context = canvas.getContext("2d");
        context.drawImage(imageObj, c.x, c.y, c.w, c.h, 0, 0, canvas.width, canvas.height);
    }
};
$('#save').click(function(){
    var imgData = document.getElementById('canvas').toDataURL();
    var postStr = "img=" + encodeURIComponent(imgData);
    $.ajax({
        type: 'POST',
        url: '{{ path('photo_upload') }}',
        data: postStr,
        async: false,
        processData: false,
        error: function(){
            $('.hero-unit').prepend('<div class="alert alert-error">The photo could not be uploaded.<button type="button" class="close" data-dismiss="alert">×</button></div>');
        }
    });
});

简单测试PHP

define('UPLOAD_DIR', 'photos/');
$img = $_POST['img'];
$img = str_replace('data:image/png;base64,', '', $img);
$img = str_replace(' ', '+', $img);
$data = base64_decode($img);
$file = UPLOAD_DIR  . 'photo.png';
$fp = fopen($file, 'wb');
$success=fwrite($fp, $data);
fclose($fp);
print $success ? $file : 'Unable to save the file.';

我的 HTML:

<div id="webcam"></div>
<a href="javascript:webcam.capture();changeFilter();void(0);">Take a picture instantly</a>
<canvas id="canvas" height="240" width="320"></canvas>
<canvas id="preview" style="width:300px;height:300px;overflow:hidden;"></canvas>
<a class="btn btn-primary btn-large" id="save">Save Photo</a>

【问题讨论】:

    标签: php javascript jquery jcrop


    【解决方案1】:

    该代码是否正是您要使用的代码?

    我的猜测是你的画布仍然是默认大小(恰好是 300x150),这会导致它成为发送到服务器并保存的图像。

    另外,为什么你的预览带有样式的宽度和高度,而不是设置实际的宽度和高度?

    【讨论】:

    • 感谢您的帮助。直接设置宽度和高度。我确实有一些 css 设置了事物的大小以及我排除的实际网络摄像头捕获代码。猜猜它无法根据 css 样式确定大小。
    • 你知道,画布的宽度和高度属性控制它的“绘图”大小(以及它的物理大小)。设置 CSS 尺寸会覆盖物理尺寸,但不会覆盖绘图尺寸(因此,如果您的画布是 300x150 并且您将 CSS 设置为 300x300,它只会拉伸以显示该尺寸,与图像相同)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多