Hôm nay mình sẽ giới thiệu với các bạn một cách kết hợp PHP và JS để viết một trang Web xem nội dung file PDF dưới dạng hình ảnh mà người truy cập không thể tải file PDF về máy tính. Cách này mình lấy ý tưởng tưởng tượng từ PDF JS và mình đã kết hợp PHP vào để thực hiện trong một dự án gần đây
Trước tiên bạn cần đưa thư viện PDF JS vào thẻ của trang và đoạn CSS định dạng thêm đường viền cho hình nội dung cho dễ nhìn.
#the-canvas { border: 1px solid black; direction: ltr; }
Tiếp theo, bạn xây dựng một trang phân tích cục bộ và đánh số trang xem. Trong đoạn mã sau tôi đã sử dụng Lớp trong thư viện Bootstrap
Trang trước Trang sau Trang: /
Sau cùng bạn thêm đoạn code sau, đoạn code dùng PHP đọc nội dung file đưa vào JS để hiển thị vào thẻ và phân trang.
var pdfData = atob['']; var pdfjsLib = window['pdfjs-dist/build/pdf']; pdfjsLib.GlobalWorkerOptions.workerSrc = "//mozilla.github.io/pdf.js/build/pdf.worker.js"; var pdfDoc = null, pageNum = 1, pageRendering = false, pageNumPending = null, scale = 1.2, canvas = document.getElementById['the-canvas'], ctx = canvas.getContext['2d']; canvas.oncontextmenu = function[] {return false}; var loadingTask = pdfjsLib.getDocument[{data: pdfData}]; loadingTask.promise.then[function[pdf] { pdfDoc = pdf; document.getElementById['page_count'].textContent = pdf.numPages; renderPage[pageNum]; }, function [reason] { console.error[reason]; }]; function renderPage[num] { pageRendering = true; pdfDoc.getPage[num].then[function[page] { var viewport = page.getViewport[{scale: scale}]; canvas.height = viewport.height; canvas.width = viewport.width; var renderContext = { canvasContext: ctx, viewport: viewport }; var renderTask = page.render[renderContext]; renderTask.promise.then[function[] { pageRendering = false; if [pageNumPending !== null] { renderPage[pageNumPending]; pageNumPending = null; } }]; }]; document.getElementById['page_num'].value = num; } function queueRenderPage[num] { if [pageRendering] pageNumPending = num; else renderPage[num]; } function onPrevPage[] { if[pageNum = pdfDoc.numPages] return; pageNum++; queueRenderPage[pageNum]; } document.getElementById['next'].addEventListener['click', onNextPage]; function onOfPage[e] { var num = parseInt[e.value]; if[Number.isInteger[num] == false] return; if[num > pdfDoc.numPages || num < 1] return; pageNum = num; queueRenderPage[pageNum]; }
Tới đây trang của bạn có thể hiển thị nội dung của tệp PDF dưới dạng hình ảnh rồi
Ngoài ra, bạn cũng có thể thêm mã đoạn oncontextmenu="return false;"
Bạn nào cảm thấy bài viết này hay thì hãy chia sẻ cho những bạn khác cần đến nhé. Chúc các bạn thành công
Ngụy Kim Hưng
Add new
Chào các bạn, hôm nay mình sẽ giới thiệu cho các bạn đang lập trình php mà chưa biết cách tạo logo Mờ ẩn trên hình [Logo Hình mờ trong suốt]
Đoạn code php sau sẽ giúp các bạn tạo logo Mờ ẩn trên hình. Bạn có thể ứng dụng cho việc tải hình ảnh lên trang web và gắn logo bản quyền cho hình ảnh đó. Đoạn code chỉ lấy ví dụ hình ảnh có type là image/jpeg nên nếu các bạn muốn thực hiện với type khác các bạn tìm hiểu thêm nhé
// Cấu hình vị trí độ mờ $horiz_position = 'left'; // center | left | right $horiz_shift = '20'; //Khoảng cách pixel với tọa độ x $vert_position = 'top'; // middle | top | bottom $vert_shift = '20'; //Khoảng cách pixel với tọa độ y $transparency = '50'; //Tính trong suốt của hình logo mờ $picture = imagecreatefromjpeg['iot-agitech.jpg']; // Hình ảnh cần gắn logo mờ $logo_watermark = imagecreatefrompng['logo-cnxag.png']; // Hình logo [chọn file png] $pct = $transparency/100; $w = imagesx[$logo_watermark]; $h = imagesy[$logo_watermark]; imageAlphaBlending[$logo_watermark, false]; // Tìm pixel mờ nhất trong hình ảnh [pixel có giá trị alpha nhỏ nhất] $minAlpha = 127; for[$x = 0; $x < $w; $x++] { for[$y = 0; $y < $h; $y++] { $alpha = [imagecolorat[$logo_watermark, $x, $y] >> 24] & 0xFF; if[$alpha < $minAlpha] { $minAlpha = $alpha; } } } // Lặp qua các pixel hình ảnh và sửa đổi alpha cho từng pixel for[$x = 0; $x < $w; $x++] { for[$y = 0; $y < $h; $y++] { $colorXY = imagecolorat[$logo_watermark, $x, $y]; $alpha = [$colorXY >> 24] & 0xFF; if[$minAlpha !== 127] { $alpha = 127 + 127 * $pct * [$alpha - 127] / [127 - $minAlpha]; } else { $alpha += 127 * $pct; } $alphaColorXY = imagecolorallocatealpha[ $logo_watermark, [$colorXY >> 16] & 0xFF, [$colorXY >> 8] & 0xFF, $colorXY & 0xFF, $alpha ]; if[!imagesetpixel[$logo_watermark, $x, $y, $alphaColorXY]] { return false; } } } $picture_width=imageSX[$picture]; $picture_height=imageSY[$picture]; $watermarkfile_width=imageSX[$logo_watermark]; $watermarkfile_height=imageSY[$logo_watermark]; // Lấy vị trí tọa độ x cho hình mờ switch [$horiz_position] { case 'center': $dest_x = [ $picture_width / 2 ] - [ $watermarkfile_width / 2 ]; break; case 'left': $dest_x = $horiz_shift; break; case 'right': $dest_x = $picture_width - $watermarkfile_width - $horiz_shift; break; } // Lấy vị trí tọa độ y cho hình mờ switch [$vert_position] { case 'middle': $dest_y = [ $picture_height / 2 ] - [ $watermarkfile_height / 2 ]; break; case 'top': $dest_y = $vert_shift; break; case 'bottom': $dest_y = $picture_height - $watermarkfile_height - $vert_shift; break; } // Dùng cho hình gif // if[$picture_fileType == 'gif'] { // $tempimage = imagecreatetruecolor[$picture_width, $picture_height]; // imagecopy[$tempimage, $picture, 0, 0, 0, 0, $picture_width, $picture_height]; // $picture = $tempimage; // } imagecopy[$picture, $logo_watermark, $dest_x, $dest_y, 0, 0, $watermarkfile_width, $watermarkfile_height]; header['Content-Type: image/png']; imagepng[$picture];
Kết quả hình ảnh sẽ giống như sau
Mong là bài viết này sẽ giúp ít cho những bạn đang tìm hiểu và phát triển kỹ năng lập trình php, để viết ra chức năng ứng dụng hay hơn cho trang web của mình
Chúc các bạn thành công
Ngụy Kim Hưng
Add new
Hôm nay mình xin giới thiệu một hàm PHP tự mã được sử dụng để tạo Captcha Image sử dụng trong Laravel Framework
Trước tiên các bạn cần kiểm tra xem có bật sử dụng Extension GD2 trong php chưa, vì hàm có sử dụng thư viện để tạo Image
Các bạn đã tạo một Tuyến đến Trình điều khiển chứa hàm getCaptcha bên dưới
public function getCaptcha[Request $request] { $font = public_path['fonts/arial.ttf']; //đường dẫn font chữ trong public $name = $request->name?$request->name:'captchacode'; //lấy tên session từ request, mặc định là captchacode $lenght = $request->lenght?$request->lenght:'5'; //số ký tự lấy từ request, mặc định là 5 $width = $request->width?$request->width:'160'; //chiều rộng hình lấy từ request, mặc định là 160 $height = $request->height?$request->height:'40'; //chiều cao hình lấy từ request, mặc định là 40 $code = $this->generateCode[$lenght]; //Hàm lấy ngẫu nhiên theo số ký tự $font_size = $height * 0.75; $image = imagecreate[$width, $height] or die['Cannot initialize new GD image stream']; $background_color = imagecolorallocate[$image, 255, 255, 255]; $text_color = imagecolorallocate[$image, 20, 40, 100]; $noise_color = imagecolorallocate[$image, 255, 255, 255]; for[ $i=0; $i