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

Форум PHP

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

 

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

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

тема: GD - header ("Content-type: image/jpeg"); ?
 
 автор: Serg_l   (08.01.2007 в 22:03)   письмо автору
 
 

Скрипт работает нормально и проходит промежуточные проверки
только в итоге выдает ошибку - Warning: Cannot modify header information - headers already sent by (output started at...

Фото выводит в виде символов - ...Ж:щgщW‘Щh·3ґ«$!e”HV...


<?php
// Резак превьюшек

header ("Content-type: image/jpeg"); 

$img "фото.jpg";

// Уменьшение до заданных разметров 50 * 50
// Задаем параметры результата - ширина/высота
if (!$max_width)
  
$max_width 50;
if (!
$max_height)
  
$max_height 50;

// Массив размеров исходного фото - вытаскиваем его ширину/высоту
$size GetImageSize($img);

print_r ($size); // Проверяем - массив печатается нормально

$width $size[0];
$height $size[1];

// Получаем коэффициент масштабирования делением парам-ов результата на парам-ры загружаемого фото
$x_ratio $max_width $width;
$y_ratio $max_height $height;

// Вычисляем ширину/высоту с учетом горизонтальн/вертик кадра и обрезанной стороной - ширина/высота
if ( ($width <= $max_width) && ($height <= $max_height) ) {
  
$tn_width $width;
  
$tn_height $height;
}
else if ((
$x_ratio $height) < $max_height) {
  
$tn_height ceil($x_ratio $height);
  
$tn_width $max_width;
}
else {
  
$tn_width ceil($y_ratio $width);
  
$tn_height $max_height;
}
// Получаем идентификатор, указывающий на изображение
if($src ImageCreateFromJpeg($img))
echo (
"src от имагекреатера готов"); // Проверяем - здесь работает

// Создаем пустой холст с вычисленными размерами
if($dst ImageCreateTrueColor($tn_width,$tn_height))
echo (
"dst от имагекреат-трутайпа готов");  // Проверяем - здесь работает

// Копируем прямоугольную область изображения $src на изображение $dst
ImageCopyResized($dst$src0000,
    
$tn_width,$tn_height,$width,$height);

// Выводим на экран превьюшку с качеством по-умолчанию
    
imagejpeg ($dst);
?>


Как вывести нормальное изображение?

   
 
 автор: NIK   (08.01.2007 в 22:14)   письмо автору
 
   для: Serg_l   (08.01.2007 в 22:03)
 

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

   
 
 автор: Serg_l   (08.01.2007 в 22:19)   письмо автору
 
   для: NIK   (08.01.2007 в 22:14)
 

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

   
 
 автор: Trianon   (08.01.2007 в 22:54)   письмо автору
 
   для: Serg_l   (08.01.2007 в 22:19)
 

Вероятно, в строке
<?php 
символ < не является первым байтом файла.

   
 
 автор: Serg_l   (08.01.2007 в 23:10)   письмо автору
 
   для: Trianon   (08.01.2007 в 22:54)
 

Вот рабочий вариант - сейчас буду разбираться - что не так :)

<?php

$image 
"фото.jpg";

if (!
$max_width)
  
$max_width 50;
if (!
$max_height)
  
$max_height 50;

$size GetImageSize($image);
$width $size[0];
$height $size[1];

$x_ratio $max_width $width;
$y_ratio $max_height $height;

if ( (
$width <= $max_width) && ($height <= $max_height) ) {
  
$tn_width $width;
  
$tn_height $height;
}
else if ((
$x_ratio $height) < $max_height) {
  
$tn_height ceil($x_ratio $height);
  
$tn_width $max_width;
}
else {
  
$tn_width ceil($y_ratio $width);
  
$tn_height $max_height;
}

$src ImageCreateFromJpeg($image);
$dst ImageCreate($tn_width,$tn_height);
ImageCopyResized($dst$src0000,
    
$tn_width,$tn_height,$width,$height);
header("Content-type: image/jpeg");
ImageJpeg($dstnull, -1);
ImageDestroy($src);
ImageDestroy($dst);

?>

   
 
 автор: Trianon   (08.01.2007 в 23:14)   письмо автору
 
   для: Serg_l   (08.01.2007 в 23:10)
 

Это совсем другое дело. Тут надо еще и убедиться в том, что не было диагностических сообщений от php.

   
 
 автор: ddhvvn   (09.01.2007 в 10:18)   письмо автору
 
   для: Trianon   (08.01.2007 в 23:14)
 

Попробуйте использовать ob_start() и ob_end_flush()

   
 
 автор: Sergey89   (09.01.2007 в 10:29)   письмо автору
 
   для: Trianon   (08.01.2007 в 23:14)
 

Убери в своем скрипте все эхо и заголовок отправляй перед отправкой изображения в браузер.

   
 
 автор: Sfinks   (09.01.2007 в 11:24)   письмо автору
 
   для: Sergey89   (09.01.2007 в 10:29)
 

Не важно в каком месте отправлять заголовок, кроме того, что он должен быть до imagejpeg(). Важно, чтобы с контент-тайпом "картинка" ничего кроме картинки не выводилось. Но суть верная: из всех функций вывода на экран, должна остаться только imagejpeg()

   
Rambler's Top100
вверх

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