Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: resize изображения
 
 автор: zorg84   (08.12.2011 в 18:57)   письмо автору
 
 

Большая просьба помочь. Не могу уменьшить фото надо чтобы из одной картинки получилось два разных размера допустим загрузил фото если оно больше чем положено то делаем ресайз одну копию 400/400 другую 200/200 и сохраняем в разные папки всё работает но не могу сохранить и уменьшить второй экземпляр всю ночь голову морочил не чего не получается


код


<?php
header
('Content-Type: text/html; charset=utf-8');
include(
"config.php");
$messages = array();
$imgDir 'photo/'// каталог для хранения изображений
@mkdir($imgDir0777); // создаем каталог, если его еще нет
if (isset($_POST['upload'])) {
    
$data $_FILES['userfile'];
    
$tmp $data['tmp_name'];  //это просто для удобства
    
if (@file_exists($tmp)) {  //итак, если файл на месте, то
        
$info = @getimagesize($_FILES['userfile']['tmp_name']); //берем информацию о файле
        
if (preg_match('{image/(.*)}is'$info['mime'], $p)) {  //убеждаемся что файл есть ни что иное как изображение
            
$newwidth 150//в данную переменную мы помещаем желаемую ширину файла
            
$newname $imgDir basename($data['name']); //имя файла оставляем прежним
            //осторожно! если файл с таким именем существует, то он будет перезаписан загружаемым
            
if ($info[0] < $newwidth){ // если ширина загужаемого изображения
              //меньше заданной в переменной, просто сохраняем файл
              
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $newname)) {
                  
$foto $_FILES['userfile']['name'];
    
$sql "INSERT INTO  entries(
                             img,
                               title,
                            imgbig
                   ) VALUES(
                                '
$newname',
                                 '
$foto',
                                '
$newname'
                                       )"
;
        
mysql_query("SET NAMES utf8");
        
mysql_query($sql) or die(mysql_error());
              
$messages[] = "Файл успешно загружен. ";
            }
            else {
              
$messages[] = "Ошибка загрузки файла!";
            }
            }

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            
else {
        
              
// а если больше, то ресайзим
              // функцию ресайза мы напишем дальше
              
if(resize($tmp$newwidth$newname)){
    
$foto $_FILES['userfile']['name'];
    
/////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////кусок кода который сохраняет фото большого размера  //////////////////////
    
$imgDir 'imagesbig/'
    
$newname2 $imgDir basename($data['name']); //имя файла оставляем прежним
    
move_uploaded_file($_FILES['userfile']['tmp_name'], $newname2);
        
    
$sql "INSERT INTO  entries(
                             img,
                               title,
                            imgbig
                   ) VALUES(
                                '
$newname',
                                 '
$foto',
                                '
$newname2'
                                       )"
;
        
mysql_query("SET NAMES utf8");
        
mysql_query($sql) or die(mysql_error());
    
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////    
                
$messages[] = "Рисунок был успешно загружен и преобразован";
              }
              else {
                
$messages[] = "Произошла ошибка при загрузке файла";
              }
            }
        }
        else {
            
$messages[] = "Ошибка! Попытка загрузить файл недопустимого формата.";
        }
    }
    else {
        
$messages[] = "Файл не был загружен.";
    }
}

?>
 
 <ul>
 <?php
    
foreach ($messages as $val) {
       echo 
"<li>" $val ."</li>";
    }
?>


<?php
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
function resize($photo_src$width$name){
 
$parametr getimagesize($photo_src);
 list(
$width_orig$height_orig) = getimagesize($photo_src);
 
$ratio_orig $width_orig/$height_orig;
 
$new_width $width;
 
$new_height $width $ratio_orig;
$newpic imagecreatetruecolor($new_width$new_height);
switch ( 
$parametr[2] ) {
  case 
1$image imagecreatefromgif($photo_src);
  break;
  case 
2$image imagecreatefromjpeg($photo_src);
  break;
  case 
3$image imagecreatefrompng($photo_src);
  break;
}
imagecopyresampled($newpic$imageffff$new_width$new_height$width_orig$height_orig);
imagejpeg($newpic$name100);
return 
true;
 }
?>
;

  Ответить  
 
 автор: Slo_Nik   (09.12.2011 в 12:43)   письмо автору
 
   для: zorg84   (08.12.2011 в 18:57)
 

применяйте два раза функцию к изображению.
первый раз если фото больше 400, второй когда уменьшаете до 200
<?php 
 
list($w$h) = getimagesize($image);
 if(
$w 400 or $h 400){
 
// уменьшаем оригинал
 // после этого, так как оригинал загружен на сайт удаляем его
 
unlink("путь_к_оригиналу");
 }
 
// уменьшаем до 200
 
resize(ваши_параметры)
?>

Вы храните изображение в базе?
Храните лучше только путь к изображению

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

<?php 
 
if (preg_match('{image/(.*)}is'$info['mime'], $p)) {  //убеждаемся что файл есть ни что иное как изображение
?>

  Ответить  
 
 автор: zorg84   (10.12.2011 в 21:46)   письмо автору
 
   для: Slo_Nik   (09.12.2011 в 12:43)
 

спасибо

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования