JCrop не сохраняет выделение при изменении размера изображения - PullRequest
0 голосов
/ 30 сентября 2011

Я впервые использую jcrop. И у меня проблема с размером изображения и кадрированием. Когда пользователь загружает изображение размером 1366x768 или больше, я предварительно просматриваю его на своей странице. У меня также есть предварительный просмотр выбора урожая, и он отлично работает. Когда я отправляю позиции, он хорошо обрезается (это когда я использую оригинальный размер изображения).
Но я не хочу отображать такие большие оригинальные изображения на странице. Пользователь должен видеть исходное изображение, кнопки предварительного просмотра и отправки в одном представлении. Поэтому мне нужно уменьшить изображение, если оно имеет размер 1366x768, и я не хочу отображать его как 683x368. Но здесь есть проблема. Когда я устанавливаю ширину и высоту на теге изображения, обрезка больше не работает нормально. Я вставляю свой код и предпросмотр изображения моей проблемы:

jQuery(window).load(function () {

            jQuery('#cropbox').Jcrop({
                onChange: showPreview,
                onSelect: showPreview,
                setSelect: [0, 0, 540, 300],
                allowResize: true, 
                 aspectRatio: 2
            });

        });

        function showPreview(coords) {
            if (parseInt(coords.w) > 0) {
                var rx = 540 / coords.w;
                var ry = 300 / coords.h;

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

            $('#x').val(coords.x);
            $('#y').val(coords.y);
            $('#w').val(coords.w);
            $('#h').val(coords.h);
        }

        </script>
</head>
<body>
    <div>        
        <p style="width: 540px; height: 300px; overflow: hidden; float:left;">
            <img id="preview" src="../../Content/Images/Full/Leopard.jpg" />
        </p>
        <p style="float:left;">
            <img id="cropbox" width="683px" height="368px" src="../../Content/Images/Full/Leopard.jpg" />
        </p>

        <p>
            @using (@Html.BeginForm("PostPicture", "Home"))
            {
                <input type="hidden" id="x" name="x" />
                <input type="hidden" id="y" name="y" />
                <input type="hidden" id="w" name="w" />
                <input type="hidden" id="h" name="h" />
                <button type="submit">
                    Send</button> 
            }
        </p>

enter image description here

Это вторая ошибка: после того, как я умножил X и Y на 2. enter image description here

Это конечный код asp.net:

public ImageResult PostPicture(int x, int y, int h, int w)
        {            
            x = x * 2;
            y = y * 2;

            Image image = Image.FromFile(Path.Combine(this.Request.PhysicalApplicationPath, "Content\\Images\\Full\\Leopard.jpg"));
            Bitmap cropedImage = new Bitmap(w, h, image.PixelFormat);
            Graphics g = Graphics.FromImage(cropedImage);

            Rectangle rec = new Rectangle(0, 0,
                                w,
                                h);

            g.DrawImage(image, rec, x, y, w, h, GraphicsUnit.Pixel);
            image.Dispose();
            g.Dispose();

            string savedFileName = Path.Combine(
                   AppDomain.CurrentDomain.BaseDirectory,
                   "Content", "Images", "Full",
                   Path.GetFileName("cropped.jpg"));

            cropedImage.Save(savedFileName);

            return new ImageResult { Image = cropedImage, ImageFormat = ImageFormat.Jpeg };
        }

Ответы [ 2 ]

1 голос
/ 01 октября 2011

Вам придется корректировать переданные координаты обрезки. Вам необходимо настроить их в соответствии с соотношением, по которому вы изменили размер изображения для предварительного просмотра. Таким образом, если вы сократили предварительный просмотр изображения до 50% от того, что было изначально, фактические координаты обрезки будут в два раза больше, чем они представлены или (x * 2, y * 2).

1 голос
/ 01 октября 2011

Возможно, попробуйте установить размер изображения в атрибуте css style:

<img id="cropbox" style="width:683px;height:368px" src="../../Content/Images/Full/Leopard.jpg" />

Возможно, лучшим решением является изменение размера изображения на сервере до требуемых размеров, а затем отображение измененного изображения пользователю вместо полного исходного изображения. Это также сократит время загрузки браузера, поскольку изображение будет меньше.

...