gpt4 book ai didi

javascript - JCrop 和 Ajax 图像上传和裁剪(laravel 5、Jquery)

转载 作者:行者123 更新时间:2023-11-28 07:11:24 27 4
gpt4 key购买 nike

我目前正在网站上构建图像上传和裁剪功能。工作流程如下

1.上传按钮被按下。2.打开一个带有上传框的模式

模态代码:

<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
<h4 class="modal-title" id="myModalLabel">Upload Profile Picture</h4>
</div>
<div class="modal-body">
<div id="load" class="display-none" style="width:32px;margin:150px auto;"><img src="img/loading2.gif"></div>
<div class="upload-container">
{!! Form::open(['file' => true, 'Method' => 'POST', 'id' => 'profile-image-upload']) !!}

<div class="alert alert-danger display-none error">
<p>File must be an image</p>
</div>

<div class="form-group">
{!! Form::label('upload', 'Upload Photo') !!}
{!! Form::file('upload', ['id' => 'file-select', 'class' => 'form-control upload-box']) !!}
</div>

{!! Form::close() !!}
</div>
<div id="image-box" class="image display-none" style="text-align:center;">
<img id="large-image" src="" style="max-width:100%;max-height:500px;display:inline-block;">
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default close-button" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary">Save changes</button>
</div>
</div>
</div>

  • 点击浏览按钮并选择一张照片,这会立即触发一个ajax请求来上传图像并返回图像的路径。
  • 服务器端代码:

    Route::post('upload-profile-pic', function(){

    $input['file'] = Request::file('upload');
    $rules = ['file' => 'mimes:jpg,png,gif,jpeg'];

    $validator = Validator::make(
    $input,
    $rules
    );

    if ($validator->fails())
    return 'false';

    $identifier = str_random(20);
    $image = Image::make(Request::file('upload'));
    $image->encode('png')->save(public_path(). '/profile-images/temp/' . $identifier . '.png');

    return $identifier;
    });
  • 在 ajax 成功后,我将生成的图像加载到 div 中并在模式中显示它。
  • Javascript(Jquery):

        $('input[type=file]').change(function () {

    $('#load').show();

    var formData = new FormData($('#profile-image-upload')[0])

    $('.upload-container').hide();

    $.ajax({
    type: 'POST',
    url: 'upload-profile-pic',
    data: formData,
    cache: false,
    contentType: false,
    processData: false,
    success: function (data) {
    $('#load').hide();
    console.log("success");
    if (data != 'false')
    console.log(data)
    $("#large-image").attr('src', '/profile-images/temp/' + data + '.png');
    $('.image').show();
    if (data == 'false')
    $('.upload-container').show();
    $('.error').show();
    },
    error: function (data) {
    $('#load').hide();
    console.log("error");
    console.log(data);
    }
    });
    });

    $('#myModal').on('hidden.bs.modal', function () {
    $('.error').hide();
    $('.upload-container').show();
    $('.image').hide();
    $('#profile-image-upload').trigger("reset");
    })

    $('.close-button').on('click', function () {
    $('.error').hide();
    $('.upload-container').show();
    $('.image').hide();
    $('#profile-image-upload').trigger("reset");
    });

    我还有两个函数可以在取消模式时重置模式,这只是隐藏图像并显示上传框。

    这一切都按预期工作,但我的问题是我想将 Jcrop 应用于生成的图像。我尝试过很多事情

    在ajax成功函数中我添加了这个

    $("#large-image").attr('src', '/profile-images/temp/' + data + '.png').Jcrop();

    上面的方法第一次有效,但如果模式关闭然后用户再次尝试,它不会用新图像替换旧图像。

    我尝试添加

    .done(fucntion(){
    $("#large-image").Jcrop(
    });

    这与最后一个选项相同,第一次有效,但此后无效。

    我已经尝试过

    var image = $("#large-image");

    然后将其添加到我的 ajax 成功中

    image.Jcrop()

    并将其添加到关闭函数

    image.destroy()

    这与上次相同,第一次出现问题并且 detroy() 在控制台中抛出错误。

    JavaScript 不是我的强项,我现在对此很困惑,有人可以帮忙吗?

    最佳答案

    使用下面的代码解决了这个问题:

    $("#large-image").attr('src', '/profile-images/temp/' + data['identifier'] + '.png').Jcrop({}, function () {
    jcrop_api = this;
    $('.modal-dialog').animate({width: ($('#large-image').width() + 50)});
    });

    然后当关闭模态时我调用

    jcrop_api.destroy()

    关于javascript - JCrop 和 Ajax 图像上传和裁剪(laravel 5、Jquery),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31268169/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com