Imagemagick - PHP 在没有服务器压力的情况下批量转换缩略图?
Imagemagick - PHP batch convert thumbnails without server stress?
我一直在使用 WPDM to create a file system for a client of mine. Unfortunately WPDM doesn't have any preview functionality for filetypes like psd, ai, pdf, etc so I've been trying to create this functionality myself by using ImageMagick。
我可能以错误的方式处理这个问题,因为我在使用代码时遇到了一个主要问题。它只会在因内部服务器错误而崩溃之前创建第一个缩略图(或两个,取决于 psds 文件大小),即使是一个缩略图也会使网站非常慢。
// Function to create preview images for all files in WPDM package
function create_previews() {
$file_list = uploaded_files_path();
$preview_image_path_list=array();
foreach ($file_list as $file) {
$imagick = new Imagick();
$img = wp_get_image_editor($file);
$imagick->readImage($file);
$filenamelres = $img->generate_filename('thumb', ABSPATH.'wp-content/uploads/thumbs/', 'png' );
if ( ! is_wp_error( $imagick ) ) {
if ( ! file_exists($filenamelres) ) {
$imagick->setIteratorIndex(0);
$imagick->thumbnailImage(200, 0);
$imagick->writeImage($filenamelres);
$preview_image_path_list[] = $filenamelres;
} else {}
} else {
$preview_image_path_list[] = $filenamelres;
}
$imagick->destroy();
}
return $preview_image_path_list;
}
这里有不同的路线吗?我可以做同样的事情而不像我现在那样对服务器施加压力吗?
根据我的评论:在任何非平凡大小的系统上,缩略图应该在后台生成,而不是在网络服务器进程中生成。切换到 cron 或作业队列,同时使用占位符缩略图。
尽管如此,还是值得找出触发 "Internal Server Error" 的原因 - 您可能需要打开错误日志以确保它被记录下来。
我一直在使用 WPDM to create a file system for a client of mine. Unfortunately WPDM doesn't have any preview functionality for filetypes like psd, ai, pdf, etc so I've been trying to create this functionality myself by using ImageMagick。
我可能以错误的方式处理这个问题,因为我在使用代码时遇到了一个主要问题。它只会在因内部服务器错误而崩溃之前创建第一个缩略图(或两个,取决于 psds 文件大小),即使是一个缩略图也会使网站非常慢。
// Function to create preview images for all files in WPDM package
function create_previews() {
$file_list = uploaded_files_path();
$preview_image_path_list=array();
foreach ($file_list as $file) {
$imagick = new Imagick();
$img = wp_get_image_editor($file);
$imagick->readImage($file);
$filenamelres = $img->generate_filename('thumb', ABSPATH.'wp-content/uploads/thumbs/', 'png' );
if ( ! is_wp_error( $imagick ) ) {
if ( ! file_exists($filenamelres) ) {
$imagick->setIteratorIndex(0);
$imagick->thumbnailImage(200, 0);
$imagick->writeImage($filenamelres);
$preview_image_path_list[] = $filenamelres;
} else {}
} else {
$preview_image_path_list[] = $filenamelres;
}
$imagick->destroy();
}
return $preview_image_path_list;
}
这里有不同的路线吗?我可以做同样的事情而不像我现在那样对服务器施加压力吗?
根据我的评论:在任何非平凡大小的系统上,缩略图应该在后台生成,而不是在网络服务器进程中生成。切换到 cron 或作业队列,同时使用占位符缩略图。
尽管如此,还是值得找出触发 "Internal Server Error" 的原因 - 您可能需要打开错误日志以确保它被记录下来。