這篇文章主要介紹了php+js如何實現裁剪任意形狀圖片,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
成都創新互聯2013年至今,先為鳳臺等服務建站,鳳臺等地企業,進行企業商務咨詢服務。為鳳臺企業網站制作PC+手機+微官網三網同步一站式服務解決您的所有建站問題。1、能夠嵌入動態文本于HTML頁面。2、對瀏覽器事件做出響應。3、讀寫HTML元素。4、在數據被提交到服務器之前驗證數據。5、檢測訪客的瀏覽器信息。6、控制cookies,包括創建和修改等。7、基于Node.js技術進行服務器端編程。
最近做到相關的項目,由于項目使用html2canvas,但是不支持css mask屬性,故,利用php后臺來裁剪。
準備兩張圖片,一張是鏤空PNG圖案,一張是任意純色圖片。
便能夠在純色圖片上裁剪出鏤空的圖案為PNG文件。
見下圖。
首先兩張PNG圖片:
生成圖片
JS片段:
html2canvas($(".head1pic"), { onrendered: function(canvas) { url = canvas.toDataURL("image/png", 1.0); sourcePic = "assets/images/demo.png"; maskPic = "assets/images/jinmao.png"; cropPicName = "cropDog1"; // ajax php截圖 $.ajax({ type: 'post', url: 'getpicture', data: { "sourcePic": sourcePic, "maskPic": maskPic, "cropPicName": cropPicName }, success: function(data) { $(".page2Bg")[0].setAttribute("src", "assets/images/crop/cropDog1.png"); }, error: function(data) { console.log(data) } }); } });
PHP的片段:
public function actionGetpicture() { $request = Yii::$app->request; $sourcePic=$request->post('sourcePic'); $maskPic=$request->post('maskPic'); $cropPicName=$request->post('cropPicName'); // $sourcePic="http://bings.local.com/bi_ngs2_2/assets/images/yinpian1/page2Bg4.png"; // $maskPic="http://bings.local.com/bi_ngs2_2/assets/images/jinmao.png"; $source = imagecreatefrompng( $sourcePic ); $mask = imagecreatefrompng( $maskPic); // Apply mask to source // imagealphamask( $source, $mask ); $this->imagealphamask ($source, $mask ); // Output header( "Content-type: image/png"); // 生成截取后的圖片并保存在本地 imagepng( $source,"assets/images/crop/".$cropPicName.".png" ); //銷毀圖片內存 imagedestroy($source); } public function imagealphamask( &$picture, $mask ) { // Get sizes and set up new picture $xSize = imagesx( $picture ); $ySize = imagesy( $picture ); $newPicture = imagecreatetruecolor( $xSize, $ySize ); imagesavealpha( $newPicture, true ); imagefill( $newPicture, 0, 0, imagecolorallocatealpha( $newPicture, 100, 100, 0, 127 ) ); // Resize mask if necessary // if( $xSize != imagesx( $mask ) || $ySize != imagesy( $mask ) ) { // $tempPic = imagecreatetruecolor( $xSize, $ySize ); // imagecopyresampled( $tempPic, $mask, 0, 0, 0, 0, $xSize, $ySize, imagesx( $mask ), imagesy( $mask ) ); // imagedestroy( $mask ); // $mask = $tempPic; // } // Perform pixel-based alpha map application for( $x = 0; $x < $xSize; $x++ ) { for( $y = 0; $y < $ySize; $y++ ) { $alpha = imagecolorsforindex( $mask, imagecolorat( $mask, $x, $y ) ); //small mod to extract alpha, if using a black(transparent) and white //mask file instead change the following line back to Jules's original: // $alpha = 127 - floor($alpha['black'] / 2); //or a white(transparent) and black mask file: // $alpha = floor($alpha['black'] / 2); $alpha = $alpha['alpha']; $color = imagecolorsforindex( $picture, imagecolorat( $picture, $x, $y ) ); //preserve alpha by comparing the two values if ($color['alpha'] > $alpha) $alpha = $color['alpha']; //kill data for fully transparent pixels if ($alpha == 127) { $color['red'] = 0; $color['blue'] = 0; $color['green'] = 0; } imagesetpixel( $newPicture, $x, $y, imagecolorallocatealpha( $newPicture, $color[ 'red' ], $color[ 'green' ], $color[ 'blue' ], $alpha ) ); } } // Copy back to original picture imagedestroy( $picture ); $picture = $newPicture; }
感謝你能夠認真閱讀完這篇文章,希望小編分享的“php+js如何實現裁剪任意形狀圖片”這篇文章對大家有幫助,同時也希望大家多多支持創新互聯網站建設公司,,關注創新互聯行業資訊頻道,更多相關知識等著你來學習!
新聞標題:php+js如何實現裁剪任意形狀圖片-創新互聯
文章路徑:http://vcdvsql.cn/article42/cdgiec.html
成都網站建設公司_創新互聯,為您提供網站制作、網站設計、建站公司、響應式網站、品牌網站制作、小程序開發
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯