Как обрезать большое изображение с помощью Jcrop - PullRequest
0 голосов
/ 05 февраля 2019

Предположим, мы хотим 650 x 650 фотографий.В этом случае мы можем установить размер поля jcrop, чтобы мы могли обрезать изображение в этом размере.Но если пользователь загружает очень большую фотографию, и мы вынуждены иметь фотографию размером 650 кв.Пользователь не может накрыть соответствующее пространство фото и положить его в коробку.Можем ли мы осветить этот вопрос?Как это делает Instagram, он подхватывает изображение, если оно слишком большое, а пользователь использует только рамку с краями изображения.Но таким образом, например, для 1080 или 1080 пикселей мы теряем около 500 пикселей.Спасибо

@section Scripts {
    <script src="~/AdminLayout/Scripts/jquery.Jcrop.min.js"></script>
    <script type="text/javascript">

        var imageCropWidth = 0;
        var imageCropHeight = 0;
        var cropPointX = 0;
        var cropPointY = 0;
        var jcropApi;

        $(document).ready(function () {
        });

        $("#hlcropImage").on("click", function (e) {

           e.preventDefault();
            cropImage();
        });

        function initCrop() {
            $('#imgEmpPhoto').Jcrop({
                onChange: setCoordsAndImgSize,
                aspectRatio: 1,
                setSelect: [0, 0, 640, 640],
                allowResize: true,
                onSelect: setCoordsAndImgSize,
            }, function () { jcropApi = this });
        }

        function showCoordinate() {
            $("#lblWidth").text(imageCropWidth + "px");
            $("#lblHeight").text(imageCropHeight + "px");
        }

        function setCoordsAndImgSize(e) {

            imageCropWidth = e.w;
            imageCropHeight = e.h;

            cropPointX = e.x;
            cropPointY = e.y;

            $("#lblWidth").text(imageCropWidth + "px");
            $("#lblHeight").text(imageCropHeight + "px");
        }

        function cropImage() {

            if (imageCropWidth == 0 && imageCropHeight == 0) {
                alert("Please select crop area.");
                return;
            }

            var img = $("#imgEmpPhoto").attr("src");

            showCroppedImage();
        }

        function showCroppedImage() {
            var x1 = cropPointX;
            var y1 = cropPointY;

            var width = imageCropWidth;
            var height = imageCropHeight;
            var canvas = $("#canvas")[0];
            var context = canvas.getContext('2d');
            var img = new Image();
            img.onload = function () {
                canvas.height = height;
                canvas.width = width;
                context.drawImage(img, x1, y1, width, height, 0, 0, width, height);
                $('#avatarCropped').val(canvas.toDataURL());
            };
            img.src = $('#imgEmpPhoto').attr("src");
        }

        function readFile(input) {

            if (input.files && input.files[0]) {
                var reader = new FileReader();

                if (jcropApi != null) {
                    jcropApi.destroy();
                }
                reader.onload = function (e) {
                    $('#imgEmpPhoto').attr('src', "");
                    var img = $('#imgEmpPhoto').attr('src', e.target.result);

                    var width = img[0].height;
                    var height = img[0].width;
                    $("#lblWidth").text(width + "px");
                    $("#lblHeight").text(height + "px");

                    initCrop();
                }

                reader.readAsDataURL(input.files[0]);
            }
        }

        $('#flPhoto').change(function () {
            readFile(this);
        });
    </script>
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.0/jquery.min.js"></script>
<form asp-action="Create" method="post" enctype="multipart/form-data">
    <div asp-validation-summary="ModelOnly" class="text-danger"></div>
    <input type="hidden" name="RecipeId" value="@ViewBag.RecipeId" />
    <div class="form-group">

        <input type="text" disabled value="@ViewBag.Title" class="form-control" />
    </div>
    
    <div class="row">
       
            <label class="control-label">select one pic</label>

            <div class="col-md-12">
                <div id="gallery">
                    <div class="row">
                        <div class="form-group">

                            <input type="file" id="flPhoto" name="ImageUpload">

                            <span asp-validation-for="ImageUpload" class="text-danger"></span>
                            <a href="#" id="hlcropImage" class="btn btn-common mb-2">crop image</a>

                            <div class="col-md-6 col-lg-2" style="height:650px; width:650px; overflow:auto;">
                                <img class="img-fluid" id="imgEmpPhoto">
                            </div>
                            <canvas id="canvas" height="5" width="5" style="vertical-align:top;"></canvas>

                        </div>
                        <p>
                            <img id="imgCropped" src="#" style="display:none;">
                        </p>

                        <input type="hidden" name="avatarCropped" id="avatarCropped">


                    </div>

                </div>
            </div>

       
    </div> 
    
    
    <div class="row">

        <div class="col-md-6">
            <div class="form-group">
                <input type="text" name="Name" />
            </div>

        </div>
        <div class="col-md-6">
            <div class="form-group">
                <input type="text" name="Description" />

            </div>
        </div>
    </div>
    <div class="form-group">
            <input type="submit" value="submit" class="btn btn-success" />
    </div>
</form>
...