如何自定义产品图片的目录

2016-07-07 15:28 来源:www.chinab4c.com 作者:ecshop专家

不错哦~~

回答:

  1. /**
  2. * 格式化商品图片名称(按目录存储)
  3. *
  4. */
  5. function 自定义函数($type, $goods_id, $source_img, $position='',$sub_dir='')
  6. {
  7. $rand_name = gmtime() . sprintf("%03d", mt_rand(1,999));
  8. $img_ext = substr($source_img, strrpos($source_img, '.'));

  9. $imgfilename = substr($source_img, strrpos($source_img, '/')+1);

  10. $dir = 'images';
  11. if (defined('IMAGE_DIR'))
  12. {
  13. $dir = IMAGE_DIR;
  14. }

  15. if($sub_dir=='') $sub_dir = date('Ym', gmtime());

  16. if (!make_dir(ROOT_PATH.$dir.'/'.$sub_dir))
  17. {
  18. return false;
  19. }
  20. if (!make_dir(ROOT_PATH.$dir.'/'.$sub_dir.'/source_img'))
  21. {
  22. return false;
  23. }
  24. if (!make_dir(ROOT_PATH.$dir.'/'.$sub_dir.'/goods_img'))
  25. {
  26. return false;
  27. }
  28. if (!make_dir(ROOT_PATH.$dir.'/'.$sub_dir.'/thumb_img'))
  29. {
  30. return false;
  31. }
  32. // 以下还会生成两张的产品图和两张的相册图,他们在数据表中存放的字段值是不一样的, 但在硬盘的存放位置和大小上却是一样的,所以这只要改一下
  33. // 改成只要生成一张图就数据库表中值保持一样就行了.
  34. /*
  35. switch($type)
  36. {
  37. case 'goods':
  38. $img_name = $goods_id . '_G_' . $rand_name;
  39. break;
  40. case 'goods_thumb':
  41. $img_name = $goods_id . '_thumb_G_' . $rand_name;
  42. break;
  43. case 'gallery':
  44. $img_name = $goods_id . '_P_' . $rand_name;
  45. break;
  46. case 'gallery_thumb':
  47. $img_name = $goods_id . '_thumb_P_' . $rand_name;
  48. break;
  49. } */

  50. $source_imgname = $dir.'/'.$sub_dir.'/source_img/'.$imgfilename;
  51. $goods_imgname = $dir.'/'.$sub_dir.'/goods_img/'.$imgfilename;
  52. $thumb_imgname = $dir.'/'.$sub_dir.'/thumb_img/'.$imgfilename;

  53. if ($position == 'source')
  54. {
  55. if(!file_exists(ROOT_PATH.$source_imgname))
  56. {

  57. if (copy(ROOT_PATH.$source_img, ROOT_PATH.$source_imgname))
  58. {
  59. return $source_imgname;
  60. }
  61. }else{
  62. return $source_imgname;
  63. }
  64. }
  65. elseif ($position == 'thumb')
  66. {
  67. if(!file_exists(ROOT_PATH.$thumb_imgname))
  68. {
  69. if (copy(ROOT_PATH.$source_img, ROOT_PATH.$thumb_imgname))
  70. {
  71. return $thumb_imgname;
  72. }
  73. }else{
  74. return $thumb_imgname;
  75. }

  76. }
  77. else
  78. {
  79. if(!file_exists(ROOT_PATH.$goods_imgname))
  80. {
  81. if (copy(ROOT_PATH.$source_img, ROOT_PATH.$goods_imgname))
  82. {
  83. return $goods_imgname;
  84. }
  85. } else{
  86. return $goods_imgname;
  87. }
  88. }
  89. return false;
  90. }
复制代码


得到的效果如下:test是自定义的目录名。这里只要先在source_img中有存在1.jpg文件,然后经过图片批量处理后。就会在另两个目录下生成同名的两个文件,不再产生多余的图片文件,可以省下好多空间

test
source_img
1.jpg
goods_img
1.jpg
thumb_img
1.jpg

不好意思。。还忘了要修改一个文件,
打开includes/cls_image.php文件,修改make_thumb这个函数
找到
$filename = $this->unique_name($dir);
/* 生成文件 */
if(function_exists('imagejpeg'))
{
.....

将这段代码改成以下的代码:
  1. /* 如果文件名为空,生成不重名随机文件名 */
  2. $upload_thumb = false;
  3. //$filename = $this->unique_name($dir); // 这个函数的作用将遍历整个目录,如果目录下不存在该文件,则生成随机文件
  4. if(strpos($img,".tmp")>0){
  5. $filename = $this->unique_name($dir);
  6. $upload_thumb = true;
  7. }else{
  8. $filename = substr($img, strrpos($img, '/')+1);
  9. }

  10. /* 生成文件 */
  11. if($upload_thumb){
  12. if (function_exists('imagejpeg'))
  13. {
  14. $filename .= '.jpg';
  15. imagejpeg($img_thumb, $dir . $filename);
  16. }
  17. elseif (function_exists('imagegif'))
  18. {
  19. $filename .= '.gif';
  20. imagegif($img_thumb, $dir . $filename);
  21. }
  22. elseif (function_exists('imagepng'))
  23. {
  24. $filename .= '.png';
  25. imagepng($img_thumb, $dir . $filename);
  26. }
  27. else
  28. {
  29. $this->error_msg = $GLOBALS['_LANG']['creating_failure'];
  30. $this->error_no=ERR_NO_GD;

  31. return false;
  32. }
  33. } else{
  34. imagejpeg($img_thumb, $dir . $filename);
  35. }
复制代码

修改的还挺多的哦