我正在尝试从客户产品页面上传图像(上传文件选项),图像上传到system/upload
文件夹并使用:文件名 + md5 哈希字符串重命名。所以,例如我上传image.jpg
,文件将被上传到system/upload/image.jpg.392da1267fbfa4be65f7859bb0b974d9
。
现在我想查看客户从管理页面上传的图像(我创建了一个新的模块页面),如何调整图像文件的大小和显示?我可以从数据库中的表oc_upload
获取文件名,但是物理文件使用的是没有扩展名的修改名称,我无法调整此文件的大小,因为它位于system/upload
文件夹中并且其扩展名已更改。图像大小调整工具只能在"设置"页面中配置了一些允许的扩展名image
文件夹中调整图像大小。
知道如何显示客户上传的图像吗?我是否需要使用其原始名称将重命名的上传文件复制到image
文件夹,然后调整大小并显示它?我很欣赏你的任何想法。谢谢。
刚刚通过将 admin/model/tool/image.php
中的 resize()
方法复制到我的控制器并对其进行修改以调整文件夹中的图像大小来获得解决方案system/upload
。
private function resizeImageUpload($old_filename, $width, $height, $new_filename = '') {
$extension_arr = array('jpeg', 'jpg', 'png', 'gif');
$old_image = $old_filename;
if (!empty($new_filename)) {
$extension = pathinfo($new_filename, PATHINFO_EXTENSION);
$new_image = 'cache/system/upload/' . utf8_substr($new_filename, 0, utf8_strrpos($new_filename, '.')) . '-' . $width . 'x' . $height . '.' . $extension;
} else {
$extension = pathinfo($old_filename, PATHINFO_EXTENSION);
$new_image = 'cache/system/upload/' . utf8_substr($old_filename, 0, utf8_strrpos($old_filename, '.')) . '-' . $width . 'x' . $height . '.' . $extension;
}
if (!in_array($extension, $extension_arr)) return '';
if (!is_file(DIR_IMAGE . $new_image) || (filectime(DIR_UPLOAD . $old_image) > filectime(DIR_IMAGE . $new_image))) {
$path = '';
$directories = explode('/', dirname(str_replace('../', '', $new_image)));
foreach ($directories as $directory) {
$path = $path . '/' . $directory;
if (!is_dir(DIR_IMAGE . $path)) {
@mkdir(DIR_IMAGE . $path, 0777);
}
}
list($width_orig, $height_orig) = getimagesize(DIR_UPLOAD . $old_image);
if ($width_orig != $width || $height_orig != $height) {
$image = new Image(DIR_UPLOAD . $old_image);
$image->resize($width, $height);
$image->save(DIR_IMAGE . $new_image);
} else {
$success = copy(DIR_UPLOAD . $old_image, DIR_IMAGE . $new_image);
}
}
if ($this->request->server['HTTPS']) {
return HTTPS_CATALOG . 'image/' . $new_image;
} else {
return HTTP_CATALOG . 'image/' . $new_image;
}
}