Вы не можете сделать это в чистом PHP, вам всегда нужен внешний рендер, чтобы получить хороший результат.
Лучше всего будет использовать внешний сервис, такой как browsershots.org API , таким образом вы не будете создавать дополнительную нагрузку на свой сервер.
Если у вас есть ресурсы для записи, вы можете использовать другой метод (все еще работающий на вашем сервере, но не PHP), который называется wkhtmltoimage, как в ответ Марио . Просто помните, что это не рекомендуется (на самом деле, вероятно, даже невозможно) на виртуальном хостинге.