dpjjmo3079 2014-03-18 18:03
浏览 53
已采纳

使用GD生成图像缩略图仅对PNG失败

I got following code for generate a image thumbnail, but it only works for JPEG for unknown reason, i cant figure out why it doesnt work for PNG ?

  1. function generate_image_thumbnail($source_image_path, $thumbnail_image_path)
  2. {
  3. list($source_image_width, $source_image_height, $source_image_type) = getimagesize($source_image_path);
  4. switch ($source_image_type) {
  5. case IMAGETYPE_GIF:
  6. $source_gd_image = imagecreatefromgif($source_image_path);
  7. break;
  8. case IMAGETYPE_JPEG:
  9. $source_gd_image = imagecreatefromjpeg($source_image_path);
  10. break;
  11. case IMAGETYPE_PNG:{
  12. $source_gd_image = imagecreatefrompng($source_image_path);
  13. break;
  14. }
  15. } //$source_image_type
  16. if ($source_gd_image === false) {
  17. return false;
  18. } //$source_gd_image === false
  19. $source_aspect_ratio = $source_image_width / $source_image_height;
  20. $thumbnail_aspect_ratio = THUMBNAIL_IMAGE_MAX_WIDTH / THUMBNAIL_IMAGE_MAX_HEIGHT;
  21. if ($source_image_width <= THUMBNAIL_IMAGE_MAX_WIDTH && $source_image_height <= THUMBNAIL_IMAGE_MAX_HEIGHT) {
  22. $thumbnail_image_width = $source_image_width;
  23. $thumbnail_image_height = $source_image_height;
  24. } //$source_image_width <= THUMBNAIL_IMAGE_MAX_WIDTH && $source_image_height <= THUMBNAIL_IMAGE_MAX_HEIGHT
  25. elseif ($thumbnail_aspect_ratio > $source_aspect_ratio) {
  26. $thumbnail_image_width = (int) (THUMBNAIL_IMAGE_MAX_HEIGHT * $source_aspect_ratio);
  27. $thumbnail_image_height = THUMBNAIL_IMAGE_MAX_HEIGHT;
  28. } //$thumbnail_aspect_ratio > $source_aspect_ratio
  29. else {
  30. $thumbnail_image_width = THUMBNAIL_IMAGE_MAX_WIDTH;
  31. $thumbnail_image_height = (int) (THUMBNAIL_IMAGE_MAX_WIDTH / $source_aspect_ratio);
  32. }
  33. $thumbnail_gd_image = imagecreatetruecolor($thumbnail_image_width, $thumbnail_image_height);
  34. imagecopyresampled($thumbnail_gd_image, $source_gd_image, 0, 0, 0, 0, $thumbnail_image_width, $thumbnail_image_height, $source_image_width, $source_image_height);
  35. switch ($source_image_type) {
  36. case IMAGETYPE_GIF:
  37. imagegif($thumbnail_gd_image, $thumbnail_image_path, 90);
  38. break;
  39. case IMAGETYPE_JPEG:
  40. imagejpeg($thumbnail_gd_image, $thumbnail_image_path, 90);
  41. break;
  42. case IMAGETYPE_PNG:{
  43. //imagealphablending($thumbnail_gd_image, false);
  44. //imagesavealpha($thumbnail_gd_image,true);
  45. imagepng($thumbnail_gd_image, $thumbnail_image_path, 90);
  46. break;
  47. }
  48. }
  49. imagedestroy($source_gd_image);
  50. imagedestroy($thumbnail_gd_image);
  51. return true;
  52. }

展开全部

  • 写回答

2条回答 默认 最新

  • duanjiashai9140 2014-03-18 19:42
    关注

    the problem is in the second png case, exactly in

    imagepng($thumbnail_gd_image, $thumbnail_image_path, 90);
    

    according to imagepng function

    quality

    Compression level: from 0 (no compression) to 9.
    

    so, change 90 to 9 (for example)

    imagepng($thumbnail_gd_image, $thumbnail_image_path, 9);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部