Используйте imagecopyresampled ()
вместо imagecopyresized ()
.
Я уже однажды размещал это на SO, но я воспроизведу его здесь, потому что это довольно круто. Он использует хеширование, создавая что-то вроде хеш-набора. Гарантированно O (1) в подмышечном пространстве (рекурсия - это хвостовой вызов) и обычно имеет временную сложность O (N). Алгоритм следующий:
Можно показать, что это O (N), при условии отсутствия патологического сценария в хешировании: даже если нет дубликатов, примерно 2/3 элементов будут удаляться при каждой рекурсии. Каждый уровень рекурсии - O (n), где маленький n - количество оставшихся элементов. Единственная проблема заключается в том, что на практике это медленнее, чем быстрая сортировка, когда есть несколько дубликатов, то есть много коллизий. Однако, когда существует огромное количество дубликатов, это удивительно быстро.
Редактировать: В текущих реализациях D hash_t составляет 32 бита. Все в этом алгоритме предполагает, что будет очень мало, если вообще будет, хеш-коллизии в полном 32-битном пространстве. Однако столкновения могут часто происходить в пространстве модулей. Однако это предположение, по всей вероятности, будет верным для любого набора данных разумного размера. Если ключ меньше или равен 32 битам, это может быть собственный хэш, что означает, что коллизия в полном 32-битном пространстве невозможна. Если он больше, вы просто не можете уместить их достаточное количество в 32-битное адресное пространство памяти, чтобы это было проблемой. Я предполагаю, что hash_t будет увеличен до 64 бит в 64-битных реализациях D, где наборы данных могут быть больше. Более того, если это когда-либо окажется проблемой, можно будет изменить хэш-функцию на каждом уровне рекурсии.
Вот реализация на языке программирования D:
Вы также можете ознакомиться с пакетом Image_Transform PEAR . Он заботится о многих низкоуровневых деталях и делает создание и обработку изображений безболезненными. Он также позволяет использовать библиотеки GD или ImageMagick. Я использовал его с большим успехом в нескольких проектах.
Вы также можете рассмотреть возможность использования ImageMagick ( http://us3.php.net/manual/en/book.imagick.php ) вместо Gd. У меня была такая же проблема всего пару дней назад с Java. Переход на ImageMagick вместо Java Advanced Images привел к огромной разнице в качестве.