您好,登錄后才能下訂單哦!
這篇文章主要介紹了php+js如何實現裁剪任意形狀圖片,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
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如何實現裁剪任意形狀圖片”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。