Php, GD и оттенки серого в цикле foreach

Возможный дубликат:
Попросите GD получить изображение из двоичная строка

Мне нужно иметь возможность изменять изображения в оттенках серого на лету в цикле foreach.

Я в основном беру набор URL-адресов изображений из базы данных, и прежде чем отображать их, мне нужно, чтобы они превратились в оттенки серого, проще говоря.

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


person vault-boy    schedule 11.10.2012    source источник
comment
да, я это сделал, но большинство примеров - это просто создание изображения из jpeg (или другого расширения) и изображения jpeg (или другого расширения) и использование заголовков изображений, для чего требуется php-скрипт в отдельном файле. Я хочу избежать добавления такого файла на сервер. Или, другими словами, нужно убедиться, что это единственный способ, прежде чем предпринимать дальнейшие шаги.   -  person vault-boy    schedule 11.10.2012
comment
@Exception Я не согласен. Он не хочет создавать еще одну php-страницу.   -  person blue112    schedule 11.10.2012
comment
@ blue112 Посмотрите еще раз на вопрос, он сказал, что его проблема в том, что он должен создать файл в качестве источника изображения, это позволяет избежать этого путем создания изображения из BLOB-объекта из базы данных, переданной в виде строки, то есть, если я что-то неправильно понимаю .   -  person xception    schedule 11.10.2012
comment
@vault-boy В следующем заявлении: Is it doable without actually creating a separate file as image source, which would process the file and output image headers? вы имеете в виду, что создаете файл изображения в качестве источника для объекта gd, чтобы преобразовать их в оттенки серого, или файл php в качестве источника для подачи изображения клиенту?   -  person xception    schedule 11.10.2012
comment
@vault-boy, вы бы использовали слишком много системных ресурсов ???? делая это   -  person Baba    schedule 11.10.2012
comment
@xception У меня есть ‹img src=imagefile.jpg› Мне нужно отобразить imagefile.jpg в оттенках серого, не меняя src, например, на. src=processimage.php?image=imagefile.jpg   -  person vault-boy    schedule 11.10.2012
comment
@baba это только на главной странице, там не больше 10-12 картинок и они довольно маленькие   -  person vault-boy    schedule 11.10.2012
comment
@vault-boy, вы можете сгенерировать их, поместив их в папку .. сгенерируйте только тот, у которого нет версии с оттенками серого ..... Если вы в порядке .. я могу придумать код для этого   -  person Baba    schedule 11.10.2012
comment
@Baba Я не могу модифицировать модуль загрузки изображений, чтобы добавить такую ​​​​функциональность. Я могу работать только с тем, что возвращается из базы данных (в данном случае это пути к изображениям).   -  person vault-boy    schedule 11.10.2012
comment
@vault-boy да, вы все еще можете работать с тем, что исходит из базы данных .. если у вас есть путь к изображению   -  person Baba    schedule 11.10.2012


Ответы (2)


Если вы хотите обработать изображение перед отображением и не вызывать php-скрипт в качестве источника изображения, а также не сохранять изображение как новое, вы можете сделать это с источником изображения base64.

Что-то типа :

<img alt="Embedded Image" src="data:image/png;base64,iVBORw0KGgoABBANSUhEUgAAADIA..." />

Вы можете использовать base64_encode на изображении, чтобы получить данные в кодировке base64.

$out = base64_encode(imagepng($im));
echo '<img src="data:image/png;base64,'.$out.'" />';

Это должно делать свое дело.

person blue112    schedule 11.10.2012
comment
пробовал, но все, что я получаю, это куча перепутанных символов в источнике - person vault-boy; 11.10.2012

Если css3 приемлем, попробуйте следующее:

.grayscale {
    filter: grayscale(100%);
    -webkit-filter: grayscale(100%);
    -moz-filter: grayscale(100%);
    -o-filter: grayscale(100%);
    -kthml-filter: grayscale(100%);
    -ms-filter: grayscale(100%);
}

добавьте class="grayscale" к вашему изображению. Таким образом, вы по-прежнему можете использовать исходные изображения, но они будут отображаться пользователю в оттенках серого. Если вы добавите

filter: gray;

к вышесказанному он будет работать даже в IE6-9

демонстрация с использованием класса в iframe: http://jsfiddle.net/8BDVn/

person xception    schedule 11.10.2012
comment
Я уже играл с css3. Вышеупомянутое не работает в Firefox - person vault-boy; 11.10.2012
comment
для firefox посмотрите demosthenes.info/blog/ 532/ - там есть фильтр svg, вам нужно будет загрузить этот svg, вероятно, на ваш сервер - person xception; 11.10.2012