Я создаю систему PHP, в которой пользователи могут создавать визуально сложное изображение, конечное требование которого составляет 50 КБ или менее .
Пользователь может выбратьчтобы текст печатался на одном из 37 шаблонных изображений, в результате получается одно плоское изображение.
Текст может быть любого цвета и одного из множества шрифтов.Это означает, что конечное изображение может быть довольно визуально сложным и непредсказуемым (за исключением размеров изображения).
Тогда у меня будет требование иметь размер файла окончательного изображения не более 50 КБ (это внешнее требование, которое нельзя изменить).
Последнее требование (опять же, внешнее): формат изображения должен быть .jpeg, .png или .gif .
Я просмотрел документацию GraphicsMagick , но нигде не могу найти упоминания о возможности установить размер файла и автоматически рассчитать сжатие .
У меня естьЯ подумал, что это можно сделать программно через цикл сжатия -> сохранить ->, но я могу себе представить, что это потребует значительных ресурсов процессора, поскольку я не могу заранее рассчитать размер файла на основе сжатия.Вот почему я спрашиваю, была ли проблема решена в GraphicsMagick.
Редактировать
Чтобы понять, почему существуют внешние требования:
Пользователь будет использовать эту систему для создания плоского изображения, которое он затем сохранит на своем ПК.Затем это изображение должно быть загружено в Adroll для использования в кампании ретаргетинга.
Вот Требования Adroll к изображению.Моя система будет предоставлять только изображения размером 728x90, 300x250 и 120x600.
Редактировать 27 ноября 2010
Так как это не представляется возможным с GraphicsMagick, яЯ готов рассмотреть другие решения, такие как непосредственное взаимодействие с библиотеками сжатия (libpng и т. д.), которые могут обеспечить функциональность.
В качестве последнего средства можно даже взглянуть на алгоритмы, которыеЯ могу сделать это и реализовать один сам.
В качестве аналогии для тех, кто склонен к этому пути:
Я после того, что A * ищет: у него есть определенное начало/ конечная точка, и находит наилучший из возможных маршрутов в самое быстрое время.
Чего я надеялся избежать, так это то, что «Поиск в ширину / глубину» должен искать: определенные начальные / конечные точки, но могут не попасть в оптимальныйрешение однажды найдет локальный минимум и может полностью выкинуть вычислительно.