За последние 24 часа нас посетили 17354 программиста и 1650 роботов. Сейчас ищут 882 программиста ...

Обрезка изображений

Тема в разделе "Прочие вопросы по PHP", создана пользователем viphost, 31 дек 2012.

  1. viphost

    viphost Активный пользователь

    С нами с:
    23 мар 2009
    Сообщения:
    307
    Симпатии:
    0
    Всем привет, с наступающий.
    Подскажите со следующей проблемой, если страница на который находится изображение
    Код (Text):
    1. <div class="img"><img src="1.jpg" /></div>
    Его размер составляет 2500х2000, мой монитор шириной 1920, поэтому я стилю картинки пишу 99% для того чтобы она отображалась в пределах монитора. И тут с crop у меня возникли проблемы, он вырезает не то что нужно, так как картинка уменьшена до пределов монитора
    Все делаю следующим образом, на странице находится следующее
    Код (Text):
    1. <?php list($width, $height) = getimagesize('1.jpg');?>
    2. сама картинка
    3. <div class="img"><img id="phote" src="1.jpg" /></div>
    4. форма передает пост запросы
    5. <form action="/crop.php" method="post">
    6.     <input type="hidden" name="img" value="1.jpg" />
    7.     <input type="hidden" name="x1" value="" />
    8.     <input type="hidden" name="y1" value="" />
    9.     <input type="hidden" name="x2" value="" />
    10.     <input type="hidden" name="y2" value="" />
    11.     <input type="hidden" name="w" value="" />
    12.     <input type="hidden" name="h" value="" />
    13.     <input type="submit" value="crop" />
    14. </form>
    далее подключаю скрипты
    Код (Text):
    1. <script type="text/javascript" src="/crop/jquery.imgareaselect.pack.js"></script>
    2. <script type="text/javascript">
    3. function preview(img, selection) {
    4.     var scaleX = 100 / (selection.width || 1);
    5.     var scaleY = 100 / (selection.height || 1);
    6.     $('#photo + div > img').css({
    7.         width: Math.round(scaleX * <?=$width;?>) + 'px',
    8.         height: Math.round(scaleY * <?=$height;?>) + 'px',
    9.         marginLeft: '-' + Math.round(scaleX * selection.x1) + 'px',
    10.         marginTop: '-' + Math.round(scaleY * selection.y1) + 'px'
    11.     });
    12. }
    13.  
    14. $(document).ready(function () {
    15.     $('<div class="prev"><img src="1.jpg" style="position: relative;" /><div>') .css({
    16.         float: 'left',
    17.         position: 'relative',
    18.         overflow: 'hidden',
    19.         width: '100px',
    20.         height: '100px'
    21.     }) .insertAfter($('#photo'));
    22.  
    23.     $('#photo').imgAreaSelect({
    24.         aspectRatio: '1:1',
    25.         handles: true,
    26.         onSelectChange: preview,
    27.         onSelectEnd: function ( image, selection ) {
    28.             $('input[name=x1]').val(selection.x1);
    29.             $('input[name=y1]').val(selection.y1);
    30.             $('input[name=x2]').val(selection.x2);
    31.             $('input[name=y2]').val(selection.y2);
    32.             $('input[name=w]').val(selection.width);
    33.             $('input[name=h]').val(selection.height);
    34.         }
    35.     });
    36. });
    37. </script>
    Обработчик
    Код (Text):
    1. $filename = $_POST['img'];
    2.         list($current_width, $current_height) = getimagesize($filename);
    3.  
    4.         // The x and y coordinates on the original image where we
    5.         // will begin cropping the image, taken from the form
    6.         $x1    = $_POST['x1'];
    7.         $y1    = $_POST['y1'];
    8.         $x2    = $_POST['x2'];
    9.         $y2    = $_POST['y2'];
    10.         $w    = $_POST['w'];
    11.         $h    = $_POST['h'];
    12.        
    13.         //die(print_r($_POST));
    14.  
    15.         // This will be the final size of the image
    16.         $crop_width = $w;
    17.         $crop_height = $h;
    18.  
    19.         // Create our small image
    20.         $new = imagecreatetruecolor($crop_width, $crop_height);
    21.         // Create original image
    22.         $current_image = imagecreatefromjpeg($filename);
    23.         // resamling (actual cropping)
    24.        
    25.         header('Content-type: image/jpeg');
    26.         header('Content-Disposition: attachment; filename="crop.jpg"');
    27.  
    28.         imagecopyresampled($new, $current_image, 0, 0, $x1, $y1, $crop_width, $crop_height, $w, $h);
    29.         // creating our new image
    30.         imagejpeg($new, $new_filename, 95);
    Выручайте, как быть и что делать?
    Не хочется картинку выводить полным размером, так как она вылазит за приделы шаблона
     
  2. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Можешь просто написать, к примеру
    Код (Text):
    1. <img src="/images/image.jpg" class="fullWidthImage" />
    2. <script type="text/javascript">
    3.     $('.fullWidthImage').css(width: (document.compatMode == 'CSS1Compat' && !window.opera ? document.documentElement.clientWidth : document.body.clientWidth));
    4. </script>
    Или вообще проставить вручную ширину:
    Код (Text):
    1. <img src="image.jpg" width="1024" />
     
  3. viphost

    viphost Активный пользователь

    С нами с:
    23 мар 2009
    Сообщения:
    307
    Симпатии:
    0
    в ручную не получится, так как изображения разные, да и мониторы у всех разные =(
    сидел крутил, так и не додумался ни до чего.
    основная проблема в том что скрипт получается берет оригинальные размеры, т.е. в файл обработчик попадает ширина и высота изображения, а так же координаты что именно выпелить нужно, в итоге, выделяешь область в центре, а получаешь картинку совсем другую, ширину выделенной области он берет ту что надо, а вот с координатами где выпилить проблемы =(
    Видать нужно как то подогнанную ширину изображения передать в обработчик, чтобы он с этой же ширины и выпиливал, хотя может и что то другое можно сделать.

    на сайте http://odyniec.net/projects/imgareaselect/usage.html
    вроде пишут что можно определить
    Код (Text):
    1. imageHeight  True height of the image (if scaled with the CSS width and height properties)
    2. imageWidth   True width of the image (if scaled with the CSS width and height properties)
    пробовал вписать в функцию после
    Код (Text):
    1. $('#photo').imgAreaSelect({
    Код (Text):
    1. imageHeight: true,
    2. imageWidth: true
    но что то не помогло =(