ФорумПрограммированиеPHP для идиотов → Уменьшение картинки

Уменьшение картинки

  • V_Z

    Сообщения: 54 Репутация: N Группа: Кто попало

    Spritz 15 июля 2010 г. 20:41

    Добрый день.
    Цель: Юзер (блондинка) загружает фото, конечно же с фотоапарата с разрешением ХХХХ/на до х ХХХХ.
    Хранить все это ХХХХ я не хочу да и отображить такую большую фотку нет желания.
    Нужно что б фотка уменьшилась до ХХХ\ХХХ.

    Как я пытался:
    (мои рассуждения)
    фотка загружается формой в темп, тобиш:
    $temp_file = $_FILES['images']['tmp_name'];
    - это фотка

    на гуглел такую функцию:
    function ResizeImage($image_from,$image_to, $fitwidth=450,$fitheight=450,$quality=75) { 
    global $php_inc;
    $os=$originalsize=getimagesize($image_from);
    // если фотка JPEG или размеры, до которых надо уменьшить - ничего не делать
    if($originalsize[2]!=2 && $originalsize[2]!=3 && $originalsize[2]!=6 && ($originalsize[2]<9
    or $originalsize[2]>12)) {
    return false;
    }
    if($originalsize[0]>$fitwidth or $originalsize[1]>$fitheight) {
    $h=getimagesize($image_from);
    if(($h[0]/$fitwidth)>($h[1]/$fitheight))
    {
    $fitheight=$h[1]*$fitwidth/$h[0];
    }else{
    $fitwidth=$h[0]*$fitheight/$h[1];
    }
    if($os[2]==2 or ($os[2]>=9 && $os[2]<=12))$i = ImageCreateFromJPEG($image_from);
    if($os[2]==3)$i=ImageCreateFromPng($image_from);
    $o = ImageCreateTrueColor($fitwidth, $fitheight);
    imagecopyresampled($o, $i, 0, 0, 0, 0, $fitwidth, $fitheight, $h[0], $h[1]);
    imagejpeg($o, $image_to, $quality);
    chmod($image_to,0777);
    imagedestroy($o);
    imagedestroy($i);
    return 2;
    }
    if($originalsize[0]<=$fitwidth && $originalsize[1]<=$fitheight) {
    $i = ImageCreateFromJPEG($image_from);
    imagejpeg($i, $image_to, $quality);
    hmod($image_to,0777);
    return 1;
    }
    }

    как сказано, она именно уменьшает изображения (разбераться не смог поэтому поверил наслово)

    дальше как сказанно в талмуте, а именно:
    ResizeImage($image_from,$image_to, $максимальная_ширина,$максимальная_высота,$jpg_качество_уменьшенного_изображения)ResizeImage($image_from,$image_to, $максимальная_ширина,$максимальная_высота,$jpg_качество_уменьшенного_изображения)

    я пытаюсь уменьшить картинку из темпа и сохранить:
    Resizeimage("$temp_file","images/foto/".$_POST['id_tab_number'].".jpg",500,500,90);


    и как это не удивительно, не РАБОТАЕТ!


    Уважаемые мега програмисты, кто сможет человеческим языком объяснить где я не прав?
    За ранее спасибо.
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 15 июля 2010 г. 20:52, спустя 10 минут 48 секунд

    ОЧень много букв. Почему не отформатирован текст?
    Спустя 77 сек.
    ты порядок параметров не перепутал случайно? что исходный файл, а что файл назначения
    Спустя 42 сек.
    вот это бля меня вымораживает сцука: "$temp_file"
    ты идиот?
    ιιlllιlllι унц-унц
  • V_Z

    Сообщения: 54 Репутация: N Группа: Кто попало

    Spritz 15 июля 2010 г. 21:01, спустя 9 минут 45 секунд

    1 - на сколько я понимаю порядок не перепулал

    2 - по поводу "идиота", я не буду объесняться что я не програмист, что не разу не чего подобного не делал и т. д.
    как сделал так сделад. если это не правлильно, объесни почему. А если это был вопрос, то отвечу - нет, я не идиот.


    3 - Кроме перепутанных до и после и неправильного имени переменной, что я не так сделал?
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 15 июля 2010 г. 21:08, спустя 7 минут 1 секунду

    [ выдохнул, успокоился ] "$file" это то же самое, что $file. НЕ НАДО ЭТИХ КАВЫЧЕК, ну скопипастил ты функцию, понятно, но ты какбы должен понимать как ты её используешь, что даешь ей на вход.

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

    приведи полностью код как ты вызываешь ресайз. откуда взялись эти переменные. саму функцию можешь не повторять
    Спустя 99 сек.
    global  $php_inc; 
    - что такое?
    ιιlllιlllι унц-унц
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 15 июля 2010 г. 21:17, спустя 9 минут 3 секунды

    getimagesize() может вернуть FALSE вместо массива, если на входе неправильный файл. должна быть проверка типа

    if (($size = getimagesize($fileName)) === FALSE) {
    throw new Exception('Убей себя!');
    }


    оператор or замени на ||

    глобал там не нужен, нигде вроде эта переменная не втретилась

    короче, пример ты нашел плохой. возьми другой
    Спустя 208 сек.
    http://stackoverflow.com/questions/747101/resize-a-picture-to-a-fixed-size
    ιιlllιlllι унц-унц
  • V_Z

    Сообщения: 54 Репутация: N Группа: Кто попало

    Spritz 15 июля 2010 г. 21:32, спустя 14 минут 23 секунды

    Спасибо. Пропробую разобраться.
    Последний вопрос: я правильно делаю что картинку прямо с темпа уменьшаю, или нужно сначала сохранить потом уменьшать?
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 15 июля 2010 г. 21:35, спустя 2 минуты 46 секунд

    должно работать, но я так не делаю
    ιιlllιlllι унц-унц
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 15 июля 2010 г. 22:22, спустя 47 минут 51 секунду

    function ResizeImage($image_from,$image_to, $fitwidth=450,$fitheight=450,$quality=75) {
    global $php_inc;

    ух, классный кусок говнокода из 90ых … обожаю его, сегодня кстати снился
    Сапожник без сапог
  • V_Z

    Сообщения: 54 Репутация: N Группа: Кто попало

    Spritz 15 июля 2010 г. 23:01, спустя 38 минут 48 секунд

    Что то не фига не умнею, на гуглел еще 5 вариантов, и не х… не работает. (уже злой, клава разьебана, глаза красные, в общем пипец полный).
    Варианта кроме как поставить ограничение на 150 кb, и написать чтоб в пайнте резали не нашел.

    Можете помоч написать код?
    у меня есть картинка которую я загрузил и сохранил у себя :
    $images_1 = "images/foto/".$_POST['id_tab_number'].".jpg";

    мне нужно чтоб она стала размером не более 500 px хоть в ширину хоть в длину.
    Тобиш мне не нужно (как во всех примерах) чтоб осталась оригинальная и сделалась еще маленькая. Мне нужно всего 1 маленькая с таким-же именем.

    Прошу прошения за наглость.
    И еще одна наглось: если можно русским языком ( с ним хоть и плохо но дружу, по сравнению со всеми остальными)
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 15 июля 2010 г. 23:09, спустя 8 минут 7 секунд

    Ну как не посочувствовать! Тем более когда тема явно моя. Я привык зарабатывать на чужом горе.

    50 баксов. Можно в вебманях.

    Или жди, когда я допишу и довыложу свой файловый менеджер. Он будет охуителен.
    ιιlllιlllι унц-унц
  • V_Z

    Сообщения: 54 Репутация: N Группа: Кто попало

    Spritz 15 июля 2010 г. 23:21, спустя 11 минут 14 секунд

    Оба варианта какие-то не интересные :)
    Может у меня с настройками пхп чтот не так???
    нашел инструкцию для таких как я:
    http://www.webjoe.ru/izmenenie-razmera-kartinki-s-pomoshhyu-php/
    И не х… не изменяется.
    Написал в тупую:
    include("resize-class.php");   
    $resizeObj = new resize(".$_POST['id_tab_number'].".jpg');
    $resizeObj -> resizeImage(400, 400, 'crop');
    $resizeObj -> saveImage('images/foto/sample-resized.jpg', 100);

    Но не может же быть что б у них работало а у меня нет…
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 15 июля 2010 г. 23:30, спустя 9 минут 40 секунд

    Есть стопудовые средства
    error_reporting(-1);
    и
    if (!function_exists('funcname')) die('ACHTUNG!');
    и
    die(var_export($v, TRUE));

    разбирайся. дело может быть в хуйне - типа неправильно путь до файла указал, но это надо увидеть
    ιιlllιlllι унц-унц
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 15 июля 2010 г. 23:36, спустя 5 минут 40 секунд

    ".jpg'

    кавычки разные
    Сапожник без сапог
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 16 июля 2010 г. 0:01, спустя 24 минуты 59 секунд

    Лови, несчастный. Полный пример, даже автоматом поворачивать умеет! (если php содержит нужные функции)


    <?php

    error_reporting(-1);

    function resizeFit($srcFile, $dstFile, $maxWidth, $maxHeight)
    {
    if (!($size = @getimagesize($srcFile))) {
    throw new Exception('This is not image');
    }
    $type = $size['mime'];
    if ($type == 'image/pjpeg') {
    $type = 'image/jpeg';
    }
    $func = 'imagecreatefrom' . substr($type, 6);
    if( !function_exists($func)) {
    throw new Exception('Function ' . $func . ' is unavailable');
    }

    $oldImage = $func($srcFile);
    if( function_exists('exif_read_data')) {
    $angle = 0;
    $exif = exif_read_data($srcFile);
    $ort = isset($exif['Orientation']) ? $exif['Orientation'] :
    (isset($exif['IFD0']['Orientation']) ? $exif['IFD0']['Orientation'] : 0);
    switch($ort) {
    case 3:
    $angle = 180; break;
    case 5: case 6: case 7:
    $angle = -90; break;
    case 8:
    $angle = 90; break;
    }
    if ($angle != 0) {
    $rotated = imagerotate($oldImage, $angle, 0);
    imagedestroy($oldImage);
    $oldImage = $rotated;
    }
    }
    $width = imagesx($oldImage);
    $height = imagesy($oldImage);

    $ratio = max($width / $maxWidth, $height / $maxHeight);
    $newWidth = round($width / $ratio);
    $newHeight = round($height / $ratio);

    $newImage = imagecreatetruecolor($newWidth, $newHeight);
    imagecopyresampled($newImage, $oldImage, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
    imagedestroy($oldImage);
    imagejpeg($newImage, $dstFile, 80);
    imagedestroy($newImage);
    }

    resizeFit('./_DSC0812.JPG', './preview/_DSC0812.JPG', 500, 500);

    header('Location: ' . './preview/_DSC0812.JPG');
    Спустя 63 сек.
    phpdude, ))) сегодня день кавычек.
    ιιlllιlllι унц-унц
  • V_Z

    Сообщения: 54 Репутация: N Группа: Кто попало

    Spritz 16 июля 2010 г. 0:18, спустя 17 минут 17 секунд

    artoodetoo,
    Спасибо за помощ и за код. За сарказм и манию величая спасибо говорть не буду. ( но я думаю ты не обидешся).



Пожалуйста, авторизуйтесь, чтобы написать комментарий!