zoukankan      html  css  js  c++  java
  • PHP图片裁剪与缩放

    图片太大且规格不统一,显示的控制需要靠JavaScript来完成,用在移动设备上时显示效果不好且流量巨大,需要对现有图片库的图片进行一次处理,生成符合移动设备用的缩略图,将原来客户端JS做的工作转移到服务器端用PHP的GD库来集中处理。

    图片源与需要的大小:

    [align=left] $src_img="wallpaper.jpg";
    $dst_w=300;
    $dst_h=200;[/align]

    剪裁图像,保证图像区域最大化显示,并按比例缩放到指定大小 

    一开始采用了 imagecopyresized 方法进行图像等比缩小,实际操作后发现,图像缩小后燥点非常严重。后再换用 imagecopysampled 方法,该方法会对图像进行重新采样,对缩小的图像进行平滑处理,使清晰度得到很大提高
    list($src_w,$src_h)=getimagesize($src_img); // 获取原图尺寸

    $dst_scale=$dst_h/$dst_w; //目标图像长宽比
    $src_scale=$src_h/$src_w; // 原图长宽比

    if($src_scale>=$dst_scale){ // 过高
    $w=intval($src_w);
    $h=intval($dst_scale*$w);

    $x=0;
    $y= ($src_h-$h)/3;
    }
    else{ // 过宽
    $h=intval($src_h);
    $w=intval($h/$dst_scale);

    $x= ($src_w-$w)/2;
    $y=0;
    }

    // 剪裁
    $source=imagecreatefromjpeg($src_img);
    $croped=imagecreatetruecolor($w,$h);
    imagecopy(
    $croped,$source,0,0,$x,$y,$src_w,$src_h);

    // 缩放
    $scale=$dst_w/$w;
    $target= imagecreatetruecolor($dst_w,$dst_h);
    $final_w=intval($w*$scale);
    $final_h=intval($h*$scale);
    imagecopyresampled(
    $target,$croped,0,0,0,0,$final_w,$final_h,$w,$h);

    // 保存
    $timestamp=time();
    imagejpeg(
    $target,"$timestamp.jpg");
    imagedestroy(
    $target);
  • 相关阅读:
    写在前面
    "路径的形式不合法"解决方案
    ExtJs学习笔记
    javascript实现ListBox左右全选、单选、多选、全请
    面向对象和面向过程的区别
    Div+CSS布局 网站设计的优点!
    libeio异步I/O库初窥
    等待进程结束
    判断Javascript变量是否为空
    后台创建进程和杀掉进程
  • 原文地址:https://www.cnblogs.com/wangzong/p/2674205.html
Copyright © 2011-2022 走看看