Я пишу простой сайт для нашего местного солдата Boy Scout, который должен позволять загружать изображения. Я использую PHP 4.3.9 для изменения размера изображений и создания эскизов, но (пожертвованный) хостинг-сервис не позволяет записывать файловые системы с PHP. Тем не менее, они обеспечивают 5G mysql. Я хочу, чтобы хранит изображения в базе данных, но не нашел способ конвертировать измененные изображения в JPEG. Насколько я могу судить, imagejpg будет записываться только в файл (который я не могу сделать). Кто-нибудь знает, можно ли сгенерировать JPEG в память в PHP? Спасибо! -ДжимJPEG сжимает изображение PHP в память
ответ
Вы можете использовать буферизацию вывода:
ob_start();
imagejpeg($image, NULL, 100);
$image_data = ob_get_contents();
ob_end_clean();
Чтобы уточнить, если вы посмотрите на manual for imagejpeg, вы увидите, что вы можете использовать его либо записать в файл или вывода необработанного изображения поток напрямую, в зависимости от второго параметра. Я использую буферизацию вывода, чтобы захватить этот поток необработанного изображения.
Чтобы уточнить: imagejpeg() не только записывает файлы, но также может отображать изображение на стандартный вывод. В этом ответе объясняется, как записать такой вывод. –
@ Álvaro G. Vicario Вы правы, я добавлю небольшое объяснение в ответ. – jeroen
Спасибо! Я видел вариант вывода rawjpeg, но думал, что будет возвращаться только в браузер. Полностью не знал о буферизации вывода! – Jim
Вы можете «сгенерировать память», но я не вижу, как вы планируете хранить изображение для последующего поиска. Если вы планируете просто изменять размер изображения каждый раз, когда кто-то загружает страницу, вы будете сжигать много процессорного времени. Поскольку нет возможности писать напрямую на диск (действительно?), Позвольте мне предложить вместо этого, что вы хотя бы сохранили изображение как BLOB в базе данных MySQL. Хотя это и неэффективно, а не хорошая практика, все же лучше, чем повторять одну и ту же работу каждый раз, когда страница обновляется.
В целом, я предлагаю сбросить «пожертвованного» поставщика и получить реальный веб-сервис. Почти каждая веб-хостинговая компания предоставляет некоторый колорит MySQL и PHP. Для общедоступного хостинга с использованием света вы, вероятно, можете уйти с чем-то за 10 - 20 долларов США в месяц. PHP 4.3.9 был выпущен в 2004 году. Будет сложно найти хорошую документацию для этой конкретной версии, и вы не можете игнорировать количество исправлений ошибок, сделанных с тех пор.
Думаю, он планирует сохранить изображение в виде BLOB в базе данных, поэтому ему нужно захватить вывод imagejpeg. Но я согласен с остальными (о сбрасывании провайдера) –
Eh. Пока я могу получить простой сайт и работать, $ 0/month бьет 10 долларов в месяц (120 долларов в год -> продает дополнительные 30 мешков попкорна! ;-)) И, да, изображения поступают в базу данных , – Jim
Я бы рекомендовал решение для буферизации вывода jeroen, но я добавлю это как классную альтернативу.
Используйте класс здесь http://www.php.net/manual/en/stream.streamwrapper.example-1.php
class VariableStream {
var $position;
var $varname;
function stream_open($path, $mode, $options, &$opened_path)
{
$url = parse_url($path);
$this->varname = $url["host"];
$this->position = 0;
return true;
}
function stream_read($count)
{
$ret = substr($GLOBALS[$this->varname], $this->position, $count);
$this->position += strlen($ret);
return $ret;
}
function stream_write($data)
{
$left = substr($GLOBALS[$this->varname], 0, $this->position);
$right = substr($GLOBALS[$this->varname], $this->position + strlen($data));
$GLOBALS[$this->varname] = $left . $data . $right;
$this->position += strlen($data);
return strlen($data);
}
function stream_tell()
{
return $this->position;
}
function stream_eof()
{
return $this->position >= strlen($GLOBALS[$this->varname]);
}
function stream_seek($offset, $whence)
{
switch ($whence) {
case SEEK_SET:
if ($offset < strlen($GLOBALS[$this->varname]) && $offset >= 0) {
$this->position = $offset;
return true;
} else {
return false;
}
break;
case SEEK_CUR:
if ($offset >= 0) {
$this->position += $offset;
return true;
} else {
return false;
}
break;
case SEEK_END:
if (strlen($GLOBALS[$this->varname]) + $offset >= 0) {
$this->position = strlen($GLOBALS[$this->varname]) + $offset;
return true;
} else {
return false;
}
break;
default:
return false;
}
}
function stream_metadata($path, $option, $var)
{
if($option == STREAM_META_TOUCH) {
$url = parse_url($path);
$varname = $url["host"];
if(!isset($GLOBALS[$varname])) {
$GLOBALS[$varname] = '';
}
return true;
}
return false;
}
}
Тогда вы можете просто сделать
stream_wrapper_register("var", "VariableStream")
or die("Failed to register protocol");
$GLOBALS['binaryImageContent'] = '';
imagejpg($im, 'var://binaryImageContent');
$data = $GLOBALS['binaryImageContent'];
echo strlen($data);
Действительно! И, судя по всему, он даже работал бы на PHP 4.3.9. –
Спасибо!Прохладная техника, плюс она дает мне больше информации о том, что можно сделать на PHP. (я на самом деле разработчик C/C++, никогда не дотрагивался до PHP, прежде чем заходить на сайт отряда). – Jim
- 1. LightBox v2 сжимает изображение в окне
- 2. Эффективность сжатия JPEG Jpeg
- 3. Сохраните каждое изображение как jpeg в php
- 4. Android: AnimationDrawable сжимает мое изображение
- 5. PHP сжимает файлы в zip
- 6. Изменение размера изображения в three.js сжимает изображение
- 7. Создать jpeg изображение из php/html
- 8. Изменить Jpeg на прогрессивное изображение Jpeg
- 9. конвертировать jpeg изображение в прозрачное изображение png
- 10. Как конвертировать JPEG-изображение в TIFF-изображение?
- 11. NFC отправить изображение/jpeg
- 12. Загрузить изображение JPEG в BlobField
- 13. Glide сжимает изображение при первой нагрузке
- 14. рендеринг HTML5 Видео на холст сжимает изображение
- 15. Функция Fopen открывает изображение в формате JPEG
- 16. jwrapper splash screen сжимает изображение всплеска
- 17. PHP Imagick JPEG Optimization
- 18. imagepng не работает, он создает пустое изображение и изображение не сжимает
- 19. Можно ли без потерь повернуть изображение JPEG в PHP?
- 20. Как сохранить jpeg-изображение в формате прогрессивного JPEG?
- 21. Сжатие jpeg на сервере с PHP
- 22. Когда realloc сжимает выделенный блок, где свободна память?
- 23. jpegoptim PHP shell_exec не сжимает изображения
- 24. Pass Base64 JPEG изображение OG: изображение
- 25. Получение ошибки на canvas.toDataUrl ('изображение/JPEG', 0,2)
- 26. Создать растровое изображение из jpeg
- 27. Изображение JPEG с неправильными цветами
- 28. Объединить изображение jpeg с рисунком
- 29. Сохранить Bitmap как изображение JPEG
- 30. R Webshot jpeg изображение пусто
О Maan .... Я знаю, вы не смотрите дареному коню в рот и т.д. и т. д., но веб-хостинг PHP, который не позволяет писать * файлы *? Это ужасно глупо. Кроме того, 4.3.9 является * очень старой версией и больше не поддерживается. Я бы подумал о переходе на достойный пакет хостинга, если это вообще возможно. –
php4 давно мертв, настало время, когда вы обновили не менее 5,2 – Maerlyn