Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Качество уменьшенной картинки 
:(
    Опции темы
Temp
  Дата 24.10.2005, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 577
Регистрация: 12.1.2003

Репутация: нет
Всего: -3



Есть такой код, который уменьшает картинку:

Код

$img_path=$p[$_GET['nr']];

list($width, $height) = getimagesize($img_path);

$newheight = 200;
$newwidth = 100;


$thumb = imagecreate($newwidth, $newheight);
$source = imagecreatefromjpeg($img_path);

imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);



header("Content-type: image/jpg");
imagejpeg($thumb);

ImageDestroy($thumb);


картинка получается нужных размером но не просто плохого, а отвратительного качества (прикреплена)

что изменить в коде чтоб получилось хорошо smile

Это сообщение отредактировал(а) Temp - 24.10.2005, 10:11

Присоединённый файл ( Кол-во скачиваний: 64 )
Присоединённый файл  111.jpg 18,54 Kb


--------------------
<удалено администрацией>
PM MAIL ICQ   Вверх
PARROT
Дата 24.10.2005, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: 2
Всего: 50



Попробуй этот код, у меня работает нормально. Уменьшенная картинка не имеет искажений.
Код

<html>
<head>
        <title>Upload & resize images</title>
        <style>
                * {
                        font-family:Verdana, Arial, Helvetica, sans-serif;
                        font-size:11px;
                }
        </style>
</head>

<body>

<form method="post" enctype="multipart/form-data">
    <table  border="0" cellspacing="1" cellpadding="5">
            <tr>
                    <td colspan="2"><strong>Çàãðóçêà</strong></td>
                   </tr>
            <tr>
                    <td>Âûáîð ôàéëà: </td>
                    <td><input type="file" name="image"></td>
                   </tr>
            <tr align="right">
                    <td colspan="2"><input name="imgsub" type="submit" id="imgsub" value="Çàãðóçèòü"></td>
                   </tr>
            </table>
</form>

<?php

function image_chop($file) {

        $path_real=$file;
        $src_img=ImageCreateFromJpeg("$path_real");

        $src_width=ImagesX($src_img);
        $src_height=ImagesY($src_img);

        $dest_width="100";
        $quality="80";

        $dest_height=($dest_width/$src_width) * $src_height;

        $dest_img=ImageCreateTrueColor($dest_width, $dest_height);
        ImageCopyResampled($dest_img, $src_img, 0, 0, 0, 0, $dest_width, $dest_height, $src_width, $src_height);

        ImageJpeg($dest_img, $file, $quality);
        ImageDestroy($dest_img);

}

if(isset($_FILES['image'])) {

        $md5                = md5(microtime());
        $bigimg                = "/home/file/www/data/{$md5}_b.jpg";
        $smimg                = "/home/file/www/data/{$md5}_s.jpg";

        move_uploaded_file($_FILES['image']['tmp_name'], $bigimg);
        copy($bigimg, $smimg);

        image_chop($smimg);

}
 echo "<img src='data/${md5}_s.jpg'>";

?>
</body>

</html>



--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
Mal Hack
Дата 24.10.2005, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



Temp
Цитата
bool imagejpeg ( resource image [, string filename [, int quality]] )

обрати внимание на 3 параметр.
PM ICQ   Вверх
MuToGeN
Дата 24.10.2005, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 4379
Регистрация: 15.8.2002
Где: Москва

Репутация: 2
Всего: 32



+ imagecopyresampled() вместо imagecopyresized()
+ imagecreatetruecolor() вместо imagecreate()


--------------------
Three pings for the token rings,
Five pings for the UNIX machines,
Hundred pings for the broken links,
One special ping to check them all
Through Simple Network Management Protocol!
PM MAIL ICQ   Вверх
Temp
Дата 26.10.2005, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 577
Регистрация: 12.1.2003

Репутация: нет
Всего: -3



MuToGeN спаибо, теперь нормально отображается smile

PARROT, не работает твой код smile


--------------------
<удалено администрацией>
PM MAIL ICQ   Вверх
PARROT
Дата 26.10.2005, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: 2
Всего: 50



Temp, а что именно в моем коде не работает?


--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
Temp
Дата 26.10.2005, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 577
Регистрация: 12.1.2003

Репутация: нет
Всего: -3



PARROT
Цитата
Warning: move_uploaded_file(/home/file/www/data/62b93d854d83ba4eb1cb3b9faf729e6b_b.jpg): failed to open stream: No such file or directory in w:\home\localhost\www\!test.php on line 58

Warning: move_uploaded_file(): Unable to move '/tmp\php3B0.tmp' to '/home/file/www/data/62b93d854d83ba4eb1cb3b9faf729e6b_b.jpg' in w:\home\localhost\www\!test.php on line 58

Warning: copy(/home/file/www/data/62b93d854d83ba4eb1cb3b9faf729e6b_b.jpg): failed to open stream: No such file or directory in w:\home\localhost\www\!test.php on line 59

Warning: imagecreatefromjpeg(/home/file/www/data/62b93d854d83ba4eb1cb3b9faf729e6b_s.jpg): failed to open stream: No such file or directory in w:\home\localhost\www\!test.php on line 34



--------------------
<удалено администрацией>
PM MAIL ICQ   Вверх
PARROT
Дата 26.10.2005, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: 2
Всего: 50



Так, а путь к картинке, куда Вы ее грузите, в какую папку, кто писать будет?
Поэтому и ругается, что не обнаружен файл...не скопирован файл в нужную директорию...не обработать файл, потому что его нет в указанной директории...
Тут нужно прописать полный путь к файлу, куда Вы его собираетесь сохранять.
Код

 $bigimg                = "/home/file/www/data/{$md5}_b.jpg";
 $smimg                = "/home/file/www/data/{$md5}_s.jpg";

smile
В моем случае файл ляжет в папку data

Это сообщение отредактировал(а) PARROT - 26.10.2005, 19:52


--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
Temp
Дата 27.10.2005, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 577
Регистрация: 12.1.2003

Репутация: нет
Всего: -3



Код

        $bigimg                = "/home/localhost/www/data/{$md5}_b.jpg";
        $smimg                = "/home/localhost/www/data/{$md5}_s.jpg";


теперь работает smile


--------------------
<удалено администрацией>
PM MAIL ICQ   Вверх
Diesel Draft
Дата 20.11.2005, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: нет
Всего: 5



У меня похожая проблема

Код


function mini_foto($im, $newWidth, $newHeight){

$imgWidth = ImageSX($im);
$imgHeight = ImageSY($im);

if($imgWidth<>$newWidth and $imgHeight<>$newHeight){
$new_img = imagecreate($newWidth, $newHeight);
imagecopyresampled($new_img, $im, 0, 0, 0, 0, $newWidth, $newHeight, $imgWidth, $imgHeight);
}else{
$new_img = $im;
}
return $new_img;
}




--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
fregs
Дата 9.12.2005, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 25.11.2004

Репутация: 1
Всего: 1



Diesel Draft
читай выше... imagecreatetruecolor вместо imagecreate

а вообще, вот откудато содранный и переделанный код который я использую в различных проектах более года

Код

/* SaveResized ()
http://scripts.rostoff.ru 
возвращаем 1 в случае успеха 
$sSource - файл источник
$sDest - куда копируем
$iMaxX - максимальная ширина
$iMaxY - максимальная высота
$iRGB - цвет заливки по умолчанию белый
$iQuality - качества jpg сжатия 80
*/
function SaveResized ($sSource, $sDest, $iMaxX, $iMaxY=$iMaxX, $iRGB=0xFFFFFF, $iQuality=80){
  if (!file_exists($sSource)) return -1; //file not found

  $aImgSize = getimagesize($sSource);

  if ($aImgSize === false) return -2; //getimgsize error

  $sMime = strtolower(substr($aImgSize['mime'], strpos($aImgSize['mime'], '/')+1));
  $fcImageCreateFrom = "imagecreatefrom" . $sMime;
  if (!function_exists($fcImageCreateFrom)) return -3;  //unknown format

  $fXRatio = $iMaxX / $aImgSize[0];
  $fYRatio = $iMaxY / $aImgSize[1];

  $fRatio       = min($fXRatio, $fYRatio);
  $fUseRatio = ($fXRatio == $fRatio);

  $iNewWidth   = $fUseRatio  ? $iMaxX  : floor($aImgSize[0] * $fRatio);
  $iNewHeight  = !$fUseRatio ? $iMaxY : floor($aImgSize[1] * $fRatio);
  $iNewLeft    = $fUseRatio  ? 0 : floor(($iMaxX - $iNewWidth) / 2);
  $iNewTop     = !$fUseRatio ? 0 : floor(($iMaxY - $iNewHeight) / 2);

  $rImg = $fcImageCreateFrom($sSource);
  $rImgDest = imagecreatetruecolor($iMaxX, $iMaxY);

  imagefill($rImgDest, 0, 0, $iRGB);
  imagecopyresampled($rImgDest, $rImg, $iNewLeft, $iNewTop, 0, 0,
    $iNewWidth, $iNewHeight, $aImgSize[0], $aImgSize[1]);

  imagejpeg($rImgDest, $sDest, $iQuality);

  imagedestroy($rImg);
  imagedestroy($rImgDest);

  return true;
} //SaveResized /


Это сообщение отредактировал(а) fregs - 9.12.2005, 12:49
PM MAIL WWW   Вверх
supercelt
Дата 1.1.2006, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 658
Регистрация: 25.8.2005

Репутация: нет
Всего: 1



imagecopyresapmled в ПХП 4 версии не работает а точнее с gd1, надо dg2
PM   Вверх
BuShaRt
Дата 12.9.2007, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: нет
Всего: 6



fregs, Спасибо, все работает, только $iMaxY=$iMaxX писать не коректно ;)
PM MAIL   Вверх
3xmax
Дата 31.10.2007, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 31.10.2007

Репутация: нет
Всего: нет



Здавствуйте.
Сам я даже не начинающий програмист. Пользуюсь тем, что найду в сети. Поэтому даже вполне рабочий со слов людей код требующий доработки я вряд ли смогу приладить для своих нужд.
Есть задача на лету уменьшить размер картинки с 650 до 500 пикселей по ширине, а если размер менее или равен 500 то оставлять как есть.
Ниже код, который работает, но на выходе дает мягко говоря не очень качественое изображение.
Есть еще одна проблема, на странице может быть и несколько картинок подряд. И еще - нужно, чтобы урл на саму картинку остался прежним, иначе в гугл имидж все проиндексированные картинки вылетят.

Заранее спасибо за помощь и уж простите за наглость.

Код

<?PHP
        $SQL = "SELECT * FROM $db_name_pict WHERE vis=0 AND id_work=$id";
        $vopr=mysql_query($SQL) or die ("No way. Can't select");
            
        while ($line = @mysql_fetch_array($vopr)) {
        extract($line);

             $image =  "/home/domain/public_html/p/$urlpicbig";               
             $size = getimagesize("$image");
               $height = $size[1];
               $width = $size[0];
             if ($height > 650)
                  {
                       $height = 650;
                       $percent = ($size[1] / $height);
                       $width = ($size[0] / $percent);
                  }
             else if ($width > 649)
                  {
                       $width = 500;
                       $percent = ($size[0] / $width);
                       $height = ($size[1] / $percent);
                  }
             echo "<img src=\"http://www.domain.com/p/$urlpicbig\" height=\"$height\" width=\"$width\" />";}
        
                }
            
?>

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Графика | Следующая тема »


 




[ Время генерации скрипта: 0.1650 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.