「水坑」关于 Z-BlogPHP 1.7 缩略图的一些记录

  • A+
所属分类:PHP

沉冰浮水
电脑网络
1条留言
1770 次浏览
1年前 (2021-02-24)

[编辑]

吐槽/反馈/建议:「水坑」关于 Z-BlogPHP 1.7 缩略图的一些记录    「水坑」关于 Z-BlogPHP 1.7 缩略图的一些记录

Z-BlogPHP 1.7 将会提供一个Thumb基础类,本身只实现从「原图」到「缩略图」的转换和保存,简单说就是自动帮你变小。

生成路径为zb_users/cache/thumbs/

主题内的使用示例

  1. function ActivePlugin_acgME()
  2. {
  3. Add_Filter_Plugin('Filter_Plugin_ViewList_Template', 'acgME_Main');
  4. Add_Filter_Plugin('Filter_Plugin_Post_Thumbs', 'acgME_Thumbs');
  5. Add_Filter_Plugin('Filter_Plugin_Zbp_BuildTemplate', 'acgME_BuidTemp');
  6. }
  7. function acgME_Main(&$template)
  8. {
  9. global $zbp;
  10. // 遍历文章设置图片
  11. if ($articles = $template->GetTags('articles')) {
  12. foreach ($articles as $article) {
  13. acgME_SetIMG($article);
  14. }
  15. }
  16. // else if ($article = $template->GetTags('article')) {
  17. // acgME_SetIMG($article);
  18. // }
  19. }
  20. // 接口函数
  21. function acgME_Thumbs($article, &$all_images, $width, $height, $count, $clip)
  22. {
  23. $rndNum = $article->ID % 19 + 1;
  24. $rndImg = acgME_Path("v-noimg", "host") . $rndNum . ".jpg";
  25. // $all_images为文章正文内的图片,有可能为空,所以追加一张作为默认;
  26. $all_images[] = $rndImg;
  27. Thumb::changeDefaultImg($rndImg); // 有图,但是缩略失败时用这个;
  28. }
  29. // 通过封装函数赋值给属性用于调用
  30. function acgME_SetIMG(&$article)
  31. {
  32. if (!isset($article->Img_640x360)) {
  33. $article->Img_640x360 = $article->Thumbs(640, 360, 1, false)[0];
  34. // ↑此处获取值无法保存,保存请用Metas
  35. }
  36. }
  37. // 用于幻灯片
  38. function acgME_BuidTemp(&$templates)
  39. {
  40. global $zbp;
  41. // 幻灯片
  42. $templates['n-slide'] = "";
  43. if (!$zbp->template->HasTemplate("m-slide")) {
  44. return;
  45. }
  46. $uFile = acgME_Path("u-slide");
  47. if (!is_file($uFile)) {
  48. return;
  49. }
  50. // 核心部分
  51. $slides = json_decode(file_get_contents($uFile));
  52. foreach ($slides as $key => &$item) {
  53. $item->Img_142x80 = Thumb::Thumbs([$item->Img], 142, 80, 1, false)[0];
  54. $item->Img_647x404 = Thumb::Thumbs([$item->Img], 647, 404, 1, false)[0];
  55. }
  56. $zbp->template->SetTags('slides', $slides);
  57. $templates['n-slide'] = $zbp->template->Output("m-slide");
  58. $script = $zbp->host . 'zb_users/theme/acgME/script/swiper-3.4.2.jquery.min.js';
  59. $templates['n-slide'] .= '{php}$footer .= \'<script src="' . script .'"></script>\'{/php}';
  60. $script = $zbp->host . 'zb_users/theme/acgME/script/swiper-act.js';
  61. $templates['n-slide'] .= '{php}$footer .= \'<script src="' . $script . '"></script>\'{/php}';
  62. }

模板内调用:

  1. <div class="post-img"><img src="{$article.Img_640x360}" alt="{$article.Title}"></div>

关于图片裁切部分的代码笔记

  1. public function handle()
  2. {
  3. if ($this->shouldClip) {
  4. // 原图:宽/高
  5. $src_scale = ($this->srcWidth / $this->srcHeight);
  6. // 新图:宽/高
  7. $dst_scale = ($this->dstWidth / $this->dstHeight);
  8. // 高度:原/新
  9. $h_scale = ($this->srcHeight / $this->dstHeight);
  10. // 宽度:原/新
  11. $w_scale = ($this->srcWidth / $this->dstWidth);
  12. // 原图需要裁切至的目标宽度(横向)
  13. $w_des = ($this->dstWidth * $h_scale);
  14. // 原图需要裁切至的目标高度(纵向)
  15. $h_des = ($this->dstHeight * $w_scale);
  16. // 新旧比例变化判断裁切方向
  17. if ($src_scale >= $dst_scale) {
  18. // 24:15 // 原图 8:5
  19. // 12:10 // 目标 6:5
  20. // x:15 = 12:10
  21. // x = 18 = 12*(15/10) = 15*(12/10) // $w_des
  22. // 原图高度不变,宽度裁切至 $w_des
  23. $dst_widthx = (($this->srcWidth - $w_des) / 2); // ((24-18)/2)
  24. $this->clip($dst_widthx, 0, $w_des, $this->srcHeight);
  25. // 先将原图裁切至 18:15,再缩放至 12:10
  26. $this->zoom($this->dstWidth, $this->dstHeight);
  27. } else {
  28. // 24:15 // 原图 8:5
  29. // 40:20 // 目标 10:5
  30. // 24:y = 40:20
  31. // y = 12 = 20*(24/40) = 24/(40/20) // $h_des
  32. // 原图宽度不变,高度裁切至 $h_des
  33. $dst_heighty = (($this->srcHeight - $h_des) / 2); // ((15-12)/2)
  34. $this->clip(0, $dst_heighty, $this->srcWidth, $h_des);
  35. // 理论上,当目标尺寸大于原图尺寸时,这里可以选择返回 24:12 的图片,即上一步裁切好的尺寸
  36. $this->zoom($this->dstWidth, $this->dstHeight); // 这里实际会返回 24:15
  37. }
  38. } else {
  39. $this->zoom($this->dstWidth);
  40. }
  41. $this->save();
  42. imagedestroy($this->srcRes);
  43. }

其他

【备忘】访止别人用 iframe 调用你的页面_电脑网络_沉冰浮水:

https://www.wdssmq.com/post/20160730633.html


「水坑」关于 Z-BlogPHP 1.7 缩略图的一些记录

本文标题:《「水坑」关于 Z-BlogPHP 1.7 缩略图的一些记录》作者:沉冰浮水
原文链接:https://www.wdssmq.com/post/20210224481.html
特别注明外均为原创,转载请注明。

设置Tag是个好习惯

分享到微信

相关文章

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin