[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Краказябры заместо картинки.
alebronn
Такая вот проблемка выплыла, нашёл скрипт который должен брать картинку и выводить её уменьшеное изображение, скрипт поставил, роверяю на денвере, но теперь заместо картинки пишет такое:

Warning: Cannot modify header information - headers already sent by (output started at Z:\home\my-site\www\template\top.html:60) in Z:\home\my-site\www\func.php on line 29

Дальше что-то про:

яШяа�JFIF������яю�>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality яЫ�C�    $.' ",#(7),01444'9=82<.342яЫ�C  2!

и потом сплошные кракозябры, типа:

�������� яД�µ��w�!1AQaq"2ЃB‘Ў±Б #3RрbrС $4б%с&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ѓ„…†‡€‰Љ’“”•–—�™љўЈ¤Ґ¦§Ё©ЄС


Скрипт брал отсюда:

forum.dklab.ru/php/advises/FunctionForCreationOfTheReducedCopyOfTheImage.html

В строке 29 - func.php находится такое:
PHP
header('Content-type: image/jpeg');


Подскажите как исправить...



Спустя 27 минут, 14 секунд (17.07.2009 - 08:43) sergeiss написал(а):
1. До строки 29 с хедером не должно быть ни одного вывода в браузер. Ни единого символа.
2. Вызов картинки производится не прямым вводом в браузере, а через тэг IMAGE, где в качестве источника картинки указывается скрипт.

Спустя 15 минут, 48 секунд (17.07.2009 - 08:59) alebronn написал(а):
Цитата (sergeiss @ 17.07.2009 - 05:43)
1. До строки 29 с хедером не должно быть ни одного вывода в браузер. Ни единого символа.
2. Вызов картинки производится не прямым вводом в браузере, а через тэг IMAGE, где в качестве источника картинки указывается скрипт.

1. То есть как? Что сначала выводится картинка а потом всё остальное? Что то я не понял, можно подробней... Может имеется ввиду инклуд раньше делать?

2. На месте вывода картинки у меня такое:

PHP
if ($line['image_files'])
                {
                    include('func.php'); 
send_thumbnail
('image.jpg',200,150,true);
                }

Спустя 39 минут, 12 секунд (17.07.2009 - 09:38) sergeiss написал(а):
1. Я не знаю, что ты там вообще выводишь smile.gif Но в любом случае: вывод картинки - это отдельный скрипт. Который больше ничего не делает, только создает (обрабатывает, преобразует) картинку и отдает ее для передачи в браузер.
Например, пусть это будет скрипт pict.php, который надо вызвать с параметром pic_id=5.

2. Тогда вызов этой картинки будет такой (это HTML, без PHP!)
HTML
<img src="pict.php?pic_id=5" />

Спустя 6 минут, 29 секунд (17.07.2009 - 09:44) glock18 написал(а):
все заголовки нужно устанавливать перед отправкой данных на браузер.

Спустя 43 минуты, 55 секунд (17.07.2009 - 10:28) alebronn написал(а):
PHP
if ($line['image_files'])
                {
                    include(
'func.php'); 
send_thumbnail('image.jpg',200,150,true);
                }


send_thumbnail Это функция создающая превьюшку, находится в файле func.php вотя её и запускаю с параметрами... Заголовок пробовал везде тыкать, и везде ему не нравится даже посоветовали перед самым выводом картинки сделать, сделал так:

PHP
header('Content-type: image/jpeg');
        
imagedestroy($src);
        
imagejpeg($thumb);
        
imagedestroy($thumb);

Всё равно ругается на строку с хеадером.... Блин я уже на трёх форумах этот вопрос поднял пока безрезультатно...

Может есть у кого другой вариант скрипта вывода превьюшки "на лету" Чтоб при клике на неё просмотреть полное изображение.

Спустя 12 минут, 38 секунд (17.07.2009 - 10:41) glock18 написал(а):
alebronn
ёпрст. читай

Цитата (glock18 @ 17.07.2009 - 06:44)
все заголовки нужно устанавливать перед отправкой данных на браузер.


header надо ставить в самый верх, куда только можешь поставить его.

Спустя 6 минут, 42 секунды (17.07.2009 - 10:48) sergeiss написал(а):
Фраза
Цитата (sergeiss @ 17.07.2009 - 09:43)
До строки 29 с хедером не должно быть ни одного вывода в браузер. Ни единого символа.

означает, что вообще ничего не должно быть перед выводом картинки. Даже пробела перед <?php не должно быть в тексте скрипта, и ни какого другого символа тоже.

Цитата (alebronn @ 17.07.2009 - 11:28)
Блин я уже на трёх форумах этот вопрос поднял пока безрезультатно...

Анекдот вспомнился...
Блондинка на светофоре не успевает оттормозиться, влетает в стоящую на красном светофоре машину. Выскакивает со словами "Ну что вы все как ездите! Я уже сегодня в шестого въезжаю!" и начинает ругаться всяко-разно laugh.gif
(ничего личного, просто анекдот вспомнился smile.gif)


Спустя 7 минут, 49 секунд (17.07.2009 - 10:55) alebronn написал(а):
Блин... Ну вот этот код, я вверху давал ссылку откуда я его брал...

PHP
<?php

function send_thumbnail
($fullpath,$width=80,$height=60,$resample=-1)
{
        @$w = getimagesize($fullpath);
        if (!$w) return d_error('Could not get image size');
        if ( (@$lim = return_bytes(ini_get('memory_limit'))) > 0)
        {
                $sz = ( $w[0]*$w[1] + $width*$height ) * 5 + (function_exists('memory_get_usage') ? memory_get_usage() : 0); // approximate size of image in memory (yes, 5 bytes per pixel!!)
                if ($sz >= $lim) return d_error('Memory limit exceeded');
        }

        if ($w[0] <= $width && $w[1] <= $height)
        {
                header('Content-type: '.$w['mime']);
                readfile($fullpath);

                return true;
        }

        if (!function_exists('imagecreate') || !function_exists('imagecopyresized')) return d_error('GD not found: either imagecreate() or imagecopyresized() do not exist.');

        $types = array('','gif','jpeg','png');
        @$ext = $types[$w[2]];

        if (function_exists($func = 'imagecreatefrom'.$ext)) $src = $func($fullpath);
        else return d_error('Unsupported image type (the function called is '.$func.'). Maybe, invalid extension?');

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

        //proportions
        $new_width = round(($height/$w[1])*$w[0]);
        $new_height = round(($width/$w[0])*$w[1]);
        if ($new_width>$width) $new_width = $width;
        if ($new_height>$height) $new_height = $height;

        if (!function_exists($cfunc = 'imagecreatetruecolor')) $cfunc='imagecreate';
        $thumb = $cfunc($new_width,$new_height);

        $func = (($resample===-&& defined('USE_RESAMPLE') && USE_RESAMPLE) || $resample===true) && function_exists('imagecopyresampled') ? 'imagecopyresampled' : 'imagecopyresized';

        // optimisations for big images
        // (idea taken from http://xpoint.ru/know-how/PHP/TeoreticheskieStat'i/QuickThumbs?comments)
        $c = 2;
        if ($func != 'imagecopyresized' && ($w[0] > $c*$new_width || $w[1] > $c*$new_height))
        {
                /* TODO: add check for memory available for doing this operation */
                $thumb_c = $cfunc($c*$new_width,$c*$new_height);
                imagecopyresized($thumb_c,$src,0,0,0,0,$c*$new_width,$c*$new_height,$w[0],$w[1]);
                imagedestroy($src);
                $src = $thumb_c;
                list($w[0],$w[1]) = array($c*$new_width,$c*$new_height);
        }

        $func($thumb,$src,0,0,0,0,$new_width,$new_height,$w[0],$w[1]);

        imagedestroy($src);
        imagejpeg($thumb);
        imagedestroy($thumb);

        return true;
}
/**
 * The function from PHP manual that returns size in bytes of PHP.INI sizes: e.g. 4K , 5M , 10G
 *
 * @param string $val
 * @return int
 */
function return_bytes($val) {
    $val = trim($val);
    $last = strtolower($val{strlen($val)-1});
    switch($last) {
        // The 'G' modifier is available since PHP 5.1.0
        case 'g':
            $val *= 1024;
        case 'm':
            $val *= 1024;
        case 'k':
            $val *= 1024;
    }

    return $val;
}

// the function to log errors.
//
// If $error_text is set to 'all', the function returns an array of all error messages.
// If $error_text is not set, the function returns the last error message.
// Else it logs the error message and returns false.
//
// example of usage:
//
// if(false) return d_error('You have set "false" in "if" condition');

function d_error($error_text = 0)
{
        static $errors = array();

        if($error_text === 'all') return $errors;
        if($error_text === 0) return (sizeof($errors)>? $errors[sizeof($errors)-1] : '');
        $errors[]=$error_text;
        return false;

 }



Пробовал лепить хеад на самый верх типа:

PHP
<?php
header
('Content-type: image/jpeg');


Бесполезно...


Да кстати а вот так я его вызываю (из другого скрипта):

PHP
<?php
                 
include('func.php'); 

send_thumbnail('image.jpg',200,150,true);
                

Спустя 18 дней, 21 час, 27 минут, 56 секунд (6.08.2009 - 08:23) Grey написал(а):
Здравствуйте. Не подскажете, как обойти трабл следующий:
У меня скрипт генерации картинки, вывод которой осуществляется командой
PHP
imagejpeg($image);

Перед этим передаются в картимнку параметры типа текста, ватермарка
PHP
img.php?image=1.jpeg&text=preved&water=

все это замечательно работает, выдает на экран картинку. Но если выбрать для этой картинки "Открыть в новом окне" браузера, то выходит это:
Цитата
�����JFIF���������>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality ���C�      $.' ",#(7),01444'9=82<.342���C   2!!22222222222222222222222222222222222222222222222222������"�������������� �������}�!1AQa"q2���#B��R��$3br� 

суть в чем - мне нужно чтобы картинка обновлялась с помощью аякса, и нужно постоянно подгружать
PHP
img.php?image=1.jpeg&text=preved&water=

а оно выдаёт вышеуказанную кракозябру.

Спустя 5 минут, 38 секунд (6.08.2009 - 08:29) sergeiss написал(а):
Цитата (Grey @ 6.08.2009 - 09:23)
суть в чем - мне нужно чтобы картинка обновлялась с помощью аякса, и нужно постоянно подгружать
PHP
img.php?image=1.jpeg&text=preved&water=

а оно выдаёт вышеуказанную кракозябру.

Так ты не выводи эту фигню в браузер! А просто создай картинку на сервере назначь ссылку на нее в тэге image (scr=".....").
При этом лучше будет ввести один дополнительный параметр вызова этой картинки ("довесок" к img.php?image=1.jpeg&text=preved&water=&sequence=345), чтобы для браузера это каждый раз была новая ссылка (чтобы из кэша не бралось).

Собственно, и аякс тут непонятно зачем... Формируешь новую ссылку, назначаешь ее в image с помощью JS. И будет у тебя новая картинка.

Спустя 1 час, 40 минут, 13 секунд (6.08.2009 - 10:09) Grey написал(а):
Забыл упомянуть smile.gif я и выводил картинку с помощью тега img конечно.
Мне просто нужно, чтобы текст появлялся на изображении по мере набора. для этого использую juery. А эта штучка выводит результат запроса
PHP
img.php?image=1.jpeg&text=preved&water=

Прямо на экран, используя контейнер с определенным дентификатором.
В данном случае
HTML
<tt id="result"></tt>

в яве выводится так:
HTML
$("#results2").text(234245).load("img.php?image=1.jpeg&text="+this.text"preved&water=1.png");

Таким образом, генерации тегов тут не получается sad.gif
и жаба выводит кракозябру.

Спустя 4 минуты, 5 секунд (6.08.2009 - 10:13) Nikitian написал(а):
Не, тут видимо другое: в текущем окне картинка загружается через тег <img> и браузер знает, что это картинка, а в новом окне никаких тегов нет и браузер только по хидерам может определить тип данных - тут видимо и ошибка: хидеры надо слать. Примерно так:
PHP
/*Тут вы создаёте свою картинку*/
Header("Content-type: image/jpeg");
imagejpeg($image);//Ваш код

Спустя 16 минут, 55 секунд (6.08.2009 - 10:30) sergeiss написал(а):
Так я не пойму... Почему бы просто не менять содержание src в тэге image по мере ввода текста? Зачем аякс, когда всё можно просто сделать? При изменении параметров браузер должен запрашивать новую картинку, которую сервер будет формировать и отдавать браузеру.

Типа такого:
HTML
<img src="Pictures/stop_sign.jpg" name="im01" id="im01"/>
<input type="button" name="" value="Pic" onclick="document.getElementById('im01').src='Pictures/no.jpg';"/>

Ежели ты хоть что-то изменишь в src, хоть один символ, то это приведет к загрузке новой картинки.

Спустя 15 минут, 32 секунды (6.08.2009 - 10:46) Grey написал(а):
Большое спасибо. В принципе, это выход. Ушел в этом направлении

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

Спустя 9 минут, 57 секунд (6.08.2009 - 10:56) sergeiss написал(а):
Цитата (Grey @ 6.08.2009 - 11:46)
Задача - изменять опции изображения (наложенный текст, размеры) и видеть это сразу, ничего не наживая.

Ну так, ЁПРСТ!!! blink.gif А кто тебя заставляет через кнопку это делать? Это же только пример был. В твоем поле ввода есть куча событий. Например, onkeyup (и далеко не только это), вызывается при отпускании кнопки, во время ввода именно в этом инпуте. Вот и делай там всё то же самое, что я показал на примере кнопки.
И будет тебе счастье! smile.gif

Спустя 14 минут, 20 секунд (6.08.2009 - 11:10) Grey написал(а):
и напоследок маленький вопрос по яве. Я в ней ни бум-бум.
У меня есть сложные формы( сложные - в смысле разные типы полей, много данных.)
С помощью jquery собираю текущее значение данной формы

HTML
$(document).ready(function(){
// --------------
function showValues() {
var str = $("form").serialize();
$("#results").text(str);
}
$(":checkbox, :radio").click(showValues);
$("select").change(showValues);
$("text").change(showValues);
showValues();
// --------------
});

В результате чего переменная str принимает вид water=water&text=text и тд, согласно данным из формы
Идя по пути наименьшего сопротивления, хотелось бы "впихать" сию перемнную сюда:
<input type="button" name="" value="Pic" onclick="document.getElementById('im01').src='image.php?water=water&text=text';"/>

вместо красного сунуть переменную str было бы идеально,но тут я вспомнил что не знаю яву. И синтаксис ее. Возможно ли совместить эти два куска кода?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.