php圖片的裁剪
『壹』 php如何實現圖片的裁剪
php中裁剪圖片主要使用gd庫的imageresampled方法
$src_path='1.jpg';
//創建源圖的實例
$src=imagecreatefromstring(file_get_contents($src_path));
//裁剪開區域左上角的點的坐標
$x=100;
$y=12;
//裁剪區域的寬和高
$width=200;
$height=200;
//最終保存成圖片的寬和高,和源要等比例,否則會變形
$final_width=100;
$final_height=round($final_width*$height/$width);
//將裁剪區域復制到新圖片上,並根據源和目標的寬高進行縮放或者拉升
$new_image=imagecreatetruecolor($final_width,$final_height);
imageresampled($new_image,$src,0,0,$x,$y,$final_width,$final_height,$width,$height);
//輸出圖片
header('Content-Type:image/jpeg');
imagejpeg($new_image);
imagedestroy($src);
imagedestroy($new_image);
『貳』 php 上傳圖片,自動按比例只求寬裁剪,請問怎麼做呢
我只能提供步驟和思路,不要想直接拿代碼。。。
第一步:判斷圖片寬高,關鍵函數getimagesize($fullpath);如果超過寬度限制,根據當前寬高比例,算出壓縮後圖片正確的寬高。一點小演算法即可。
第二步:把當前圖片復制一份,關鍵函數imagecreatefromjpeg()等,根據圖片類型(後綴)不同,函數也稍有區別。
第三步:把剛才復制的備用文件壓縮,關鍵函數ImageCopyResampled或者ImageCopyResized 根據php版本和擴展不同選擇
第四步:把生成的縮略圖保存成文件,ImageJPEG等相應函數
完成
『叄』 PHP 圖片下載本地並進行裁剪
<?php
//剪裁圖片
//1,打開圖像
//2,創建一個空白的圖像
$name="./img/1.jpg";
//cut($name,0,0,200,200);
$x1=289;
$y1=149;
$x2=438;
$y2=257;
cut($name,289,149,438,257);
functioncut($name,$x1,$y1,$x2,$y2){
functiongetinfo($name){
//getimagesize($dname)函數可以動態的獲取圖片類型,大小,寬度和高度等
$info=getimagesize($name);
$width=$info[0];
$height=$info[1];
$mime=$info['mime'];
switch($mime){
case'image/jpeg':
$res=imagecreatefromjpeg($name);
break;
case'image/gif':
$res=imagecreatefromgif($name);
break;
case'image/png':
$res=imagecreatefrompng($name);
break;
case'image/wbmp':
$res=imagecreatefromwbmp($name);
break;
}
returnarray('width'=>$width,'height'=>$height,'res'=>$res);
}
$info=getinfo($name);
$img=imagecreatetruecolor(($x2-$x1),($y2-$y1));
imagemerge($img,$info['res'],0,0,$x1,$y1,($x2-$x1),($y2-$y1),100);
//header("content-type:image/png");
//imagepng($img);
$ext=pathinfo($name,PATHINFO_EXTENSION);
$rand_name=md5(mt_rand().time()).".".$ext;
switch($ext){
case'jpg':
case'jpeg':
case'jpe':
imagejpeg($img,$rand_name);
break;
case'png':
imagepng($img,$rand_name);
break;
case'gif':
imagegif($img,$rand_name);
break;
case'bmp':
case'wbmp':
imagewbmp($img,$rand_name);
break;
}
//銷毀資源
imagedestroy($info['res']);
imagedestroy($img);
}
『肆』 如何實現PHP圖片裁剪與縮放
給你段代碼吧。上邊的是具體的事務處理。下面的是類文件。
////////////////////////////////////////////////////下面開始處理圖片壓縮問題
$src = "$fileurl";
echo $src;
$image = new Image($src);
$width= $image->getimgwidth();
echo $width."寬度是這些";
if($width>1024){
$coefficient=number_format(1024/$width, 4, '.', '');
echo $coefficient;
$image->percent = $coefficient;
$image->openImage();
$image->thumpImage();
//************************************重新給圖片命名
$randname=date("Y").date("m").date("d").date("H").date("i").date("s").rand(100, 999).".".$hz;
echo "<br/>重新命名是這個".$randname;
$fileurl=$fileimgweb.$randname;//重新給資料庫里存的圖片地址命名
// $image->showImage();
$image->saveImage($fileurl);
}
////////////////////////////////////////////////////圖片壓縮問題處理結束
--------------------------------------------------------------------------------------
<?php
/**
圖片壓縮操作類
v1.0
*/
class Image{
private $src;
private $imageinfo;
private $image;
public $percent = 0.5;
public function __construct($src){
$this->src = $src;
}
/**
獲取圖片的寬度並傳輸給前台
*/
public function getimgwidth(){
$imgwidth= getimagesize($this->src)[0];
// echo $imgwidth;
return $imgwidth;
}
/**
打開圖片
*/
public function openImage(){
list($width, $height, $type, $attr) = getimagesize($this->src);
$this->imageinfo = array(
'width'=>$width,
'height'=>$height,
'type'=>image_type_to_extension($type,false),
'attr'=>$attr
);
$fun = "imagecreatefrom".$this->imageinfo['type'];
$this->image = $fun($this->src);
}
/**
操作圖片
*/
public function thumpImage(){
$new_width = $this->imageinfo['width'] * $this->percent;
$new_height = $this->imageinfo['height'] * $this->percent;
$image_thump = imagecreatetruecolor($new_width,$new_height);
//將原圖復制帶圖片載體上面,並且按照一定比例壓縮,極大的保持了清晰度
imageresampled($image_thump,$this->image,0,0,0,0,$new_width,$new_height,$this->imageinfo['width'],$this->imageinfo['height']);
imagedestroy($this->image);
$this->image = $image_thump;
}
/**
輸出圖片
*/
public function showImage(){
header('Content-Type: image/'.$this->imageinfo['type']);
$funcs = "image".$this->imageinfo['type'];
$funcs($this->image);
}
/**
保存圖片到硬碟
*/
public function saveImage($fileurl){
imagejpeg($this->image, $fileurl,75);
// $funcs = "image".$this->imageinfo['type'];
// $funcs($this->image,$name.'.'.$this->imageinfo['type']);
}
/**
銷毀圖片
*/
public function destruct(){
imagedestroy($this->image);
}
}
?>
『伍』 PHP 長方形圖片 不變形 裁剪 生成 正方形
$x = (200-150)/2;
imageresampled($thumb, $img_r2, 0, 0, $x, 0, $thumb_w, $thumb_h, 150, 150);
請看imageresampled詳細介紹:
imageresampled
(PHP 4 >= 4.0.6, PHP 5)
imageresampled — 重采樣拷貝部分圖像並調整大小
說明
bool imageresampled ( resource $dst_image, resource $src_image, int $dst_x, int $dst_y, int $src_x, int $src_y, int $dst_w, int $dst_h, int $src_w, int $src_h )
imageresampled() 將一幅圖像中的一塊正方形區域拷貝到另一個圖像中,平滑地插入像素值,因此,尤其是,減小了圖像的大小而仍然保持了極大的清晰度。如果成功則返回 TRUE,失敗則返回 FALSE。
dst_image 和 src_image 分別是目標圖像和源圖像的標識符。如果源和目標的寬度和高度不同,則會進行相應的圖像收縮和拉伸。坐標指的是左上角。本函數可用來在同一幅圖內部拷貝(如果 dst_image 和 src_image 相同的話)區域,但如果區域交迭的話則結果不可預知。
注意: 因為調色板圖像限制(255+1 種顏色)有個問題。重采樣或過濾圖像通常需要多於 255 種顏色,計算新的被重采樣的像素及其顏色時採用了一種近似值。對調色板圖像嘗試分配一個新顏色時,如果失敗我們選擇了計算結果最接近(理論上)的顏色。這並不總是視覺上最接近的顏色。這可能會產生怪異的結果,例如空白(或者視覺上是空白)的圖像。要跳過這個問題,請使用真彩色圖像作為目標圖像,例如用 imagecreatetruecolor() 創建的。
注意: 本函數需要 GD 2.0.1 或更高版本(推薦 2.0.28 及更高版本)。
『陸』 如何使用PHP動態把JPEG圖片切割成幾塊
<?php
$maxW=100; //准備將圖片裁減成的小圖的寬
$maxH=100; //准備將圖片裁減成的小圖的高
$link= "D:/Apache24/htdocs/web/test.jpg";//圖片路徑,自己修改
$img = imagecreatefromjpeg($link);
list($width, $height, $type, $attr) = getimagesize($link);
$widthnum=ceil($width/$maxW);
$heightnum=ceil($height/$maxH);
$iOut = imagecreatetruecolor ($maxW,$maxH);
//bool image ( resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h )
//將 src_im 圖像中坐標從 src_x,src_y 開始,寬度為 src_w,高度為 src_h 的一部分拷貝到 dst_im 圖像中坐標為 dst_x 和 dst_y 的位置上。
for ($i=0;$i < $heightnum;$i++) {
for ($j=0;$j < $widthnum;$j++) {
image($iOut,$img,0,0,($j*$maxW),($i*$maxH),$maxW,$maxH);//復制圖片的一部分
imagejpeg($iOut,"D:/Apache24/htdocs/web/img/".$i."_".$j.".jpg"); //輸出成0_0.jpg,0_1.jpg這樣的格式
}
}
?>
已測試,可以使用。
『柒』 PHP裁剪 動態裁剪框,要求生成固定大小的圖片
<?php
$sourcefile = 'x.jpg';
#目標寬度
$newwidth = 150;
#目標高度
$newheight = 120;
#目標比例
$newbili = $newwidth / $newheight;
#源圖片寬高
list($width, $height) = getimagesize($sourcefile);
if($width / $height > $newbili){
#原圖較長
$w = $width - $newbili * $height;
$h = $height;
$x = ($width - $w) / 2;
$y = 0;
}else{
#原圖較寬
$w = $width;
$h = $height - $newbili * $width;
$x = 0;
$y = ($height - $h) / 2;
}
$source = imagecreatefromjpeg($sourcefile);
$thumb = imagecreatetruecolor($newwidth, $newheight);
imageresized($thumb, $source, 0, 0, $x, $y, $newwidth, $newheight, $w, $h);
imagejpeg($thumb, "a.jpg");
註:此程序未考慮原圖比目標圖片小的情況
『捌』 php無組件裁剪圖片
functioncut_img($img,$w,$h){//要裁減的圖片,寬度,高度
$s=imagecreatefromjpeg($img);//這里以jpg圖片為例,其他圖片要修改這個方法名稱,可以上網參考(就是後面那個後綴名不一樣)
$w=imagesx($s)<$w?imagesx($s):$w;//如果圖片的寬比要求的小,則以原圖寬為准
$h=imagesy($s)<$w?imagesy($s):$h;
$bg=imagecreatetruecolor($w,$h);//創建$w*$h的空白圖像
if(image($bg,$s,0,0,0,0,$w,$h)){
if(imagejpeg($bg,"img/new_img.jpg")){//將生成的圖片保存到img/new_img.jpg
echo"success";
}else{
echo"false";
}
}else{
echo"false";
}
/*
*image($dst_im,$src_im,$dst_x,$dst_y,$src_x,$src_y,$src_w,$src_h)
將src_im圖像中坐標從src_x,src_y開始,寬度為src_w,高度為src_h的一部分拷貝到dst_im圖像中坐標為dst_x和dst_y的位置上。
*/
imagedestroy($s);//關閉圖片
imagedestroy($bg);
//這里只寫了幾個主要操作,你可以再加上開始裁減的坐標,也就是image中的第5,第6兩個參數,那麼在判斷$w和$h的地方也要相應的剪掉開始沒算進去的部分,
//然後保存路徑是否存在的判斷等
}
cut_img("img/03.jpg",100,100);
『玖』 我要用PHP做一個縮放、裁剪後台圖片的頁面,該如何做
按照我的理解應該是這樣的 ,首先你的伺服器上面有很多圖片,但是圖片尺寸不符合使用要求,你想給一個cms使用者製作一個可以裁減縮放圖片的功能.
你的思路前面2步驟是沒有問題的 .
但是第三個步驟是不對的
我們平常所看到的裁減功能.例如BAI度的頭像設置.是用JS模擬一個框框來模擬裁減.只有當用戶真正點擊保存後.通過js記錄了裁減的起始位置.結束位置,寬高.等參數.通過php的GD庫來重新繪制這張圖片.保存並替換掉原來的 ,並且更新資料庫信息.知道用戶點擊保存之前.這張圖片的數據源都沒有發生變化.