我正在尝试从客户产品页面上传图像(上传文件选项),图像上传到system/upload
文件夹并重命名为:filename + md5哈希字符串。因此,例如,我上传image.jpg
,该文件将上传到system/upload/image.jpg.392da1267fbfa4be65f7859bb0b974d9
。
现在我想看到客户从管理页面上传的图片(我创建了一个新的模块页面),如何调整大小并显示图像文件?我可以从数据库中的表oc_upload
获取文件名,但是phisical文件使用的是没有扩展名的修改后的名称,我无法调整此文件的大小,因为它位于system/upload
文件夹中并且其扩展名已更改。图像大小调整工具只能调整image
文件夹中的图像,并在“设置”页面中配置了一些允许的扩展名。
知道如何显示客户上传的图片吗?我是否需要使用其原始名称将重命名的上传文件复制到image
文件夹,然后调整大小并显示它?我很感激你的任何想法。谢谢。
答案 0 :(得分:0)
通过将resize()
中的admin/model/tool/image.php
方法复制到我的控制器并修改它以调整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;
}
}