Что лучше всего использовать phpthumb?

В настоящее время я использую phpthumb для создания миниатюр для изображений профиля. http://phpthumb.gxdlabs.com/

Это мой текущий метод:

<?php
$path_to_profile_pic = '../icons/default.png';
$profile_pic = file_get_contents('icons/default.png');
$small_profile_pic = PhpThumbFactory::create($profile_pic, array(), true);
$small_profile_pic->adaptiveResize(25, 25);
$small_profile_picAsString = $small_profile_pic->getImageAsString();
?>
<img src="data:image/png;base64,<?php echo base64_encode($small_profile_picAsString); ?>" width="25" height="25" />

Однако это очень медленно из-за base64, потому что он генерирует большое количество текста в вашем коде. Как лучше всего использовать phpthumb для создания эскизов?

Изменить

Есть ли способ сделать это без сохранения другого изображения, так как это займет больше места?


person Mico Abrina    schedule 19.02.2012    source источник


Ответы (1)


Вам лучше всегда генерировать эскизы изображений при загрузке/создании, вместо того, чтобы пытаться обслуживать их через php-скрипты по запросу. Вы можете кэшировать сгенерированные файлы в файловой системе с помощью php, используя часть вашего кода, но это все равно намного медленнее, чем их обслуживание с помощью apache.

Если вы не можете создавать миниатюры при загрузке/создании, вы можете оптимизировать текущую реализацию, кэшируя уменьшенную миниатюру в файловой системе и предоставляя их для каждого последующего запроса:

<?php
$path_to_thumb_pic = '../icons/default_thumb.png';
if (!file_exists($path_to_thumb_pic)) {
  $path_to_profile_pic = '../icons/default.png';
  $profile_pic = file_get_contents('icons/default.png');
  $small_profile_pic = PhpThumbFactory::create($profile_pic, array(), true);
  $small_profile_pic->adaptiveResize(25, 25);
  $small_profile_pic->save($path_to_thumb_pic);
}
?>

<img src="<?php echo $path_to_thumb_pic; ?>" width="25" height="25" />
person Mike B    schedule 19.02.2012
comment
Есть ли способ сделать это без сохранения другого изображения, так как оно будет занимать больше места? - person Mico Abrina; 19.02.2012
comment
@MicoAbrina Если не диск, то единственное другое место - это память в каком-то кэше памяти. Однако, если вас беспокоит место на диске, я думаю, что памяти тоже не хватает. Дисковое пространство сейчас является самым дешевым аппаратным ресурсом... действительно ли это проблема? - person Mike B; 19.02.2012
comment
Я использую это для изображений профиля для моего веб-сайта. Проблема в том, что если изображение профиля изменится, как система узнает, что нужно создать еще одну миниатюру? - person Mico Abrina; 19.02.2012
comment
@MicoAbrina Вот почему я настоятельно рекомендую создавать эскизы при создании. Когда кто-то загружает новую фотографию, вы создаете и перезаписываете любую существующую миниатюру. Вы убиваете двух зайцев одним выстрелом. - person Mike B; 19.02.2012
comment
Хорошо, но что, если, скажем, я сделал это, выложил свой веб-сайт для всеобщего обозрения и понял, что мне нужно создать больше миниатюр. Как мне сгенерировать новые эскизы для текущих пользователей? - person Mico Abrina; 19.02.2012
comment
Извините, что задаю так много вопросов. - person Mico Abrina; 19.02.2012
comment
@MicoAbrina Это хорошие вопросы :) - В этом случае вы можете создать миниатюру в обоих местах: 1) Когда пользователь загружает новую фотографию, сгенерируйте миниатюру. 2) Когда вы показываете миниатюру (как в вашем примере). Таким образом, если все эскизы пользователя будут стерты с диска, они будут воссозданы по требованию. В качестве альтернативы у вас может быть сценарий, который перебирает пользователей и создает эскизы. - person Mike B; 19.02.2012
comment
Потрясающий! Это сработало хорошо! Я просто создал класс, который генерирует миниатюры для меня. Большое спасибо! - person Mico Abrina; 19.02.2012
comment
У меня небольшая проблема с вашим предложением. Пожалуйста, проверьте stackoverflow.com/questions/9347698/ - person Mico Abrina; 19.02.2012