Bài 22: Xử lý đồ họa với thư viện GD Thủ thuật sử dụng thư viện GD tác giả : Dan Radigan Macromedia Cơ Bản Graphics Chúng ta bắt đầu tìm hiểu khái niệm tệp ảnh đuợc diễn đạt qua máy vi tính Một tệp ảnh chẳng khác tập hợp nhiều pixel hay dots màu sắc định Mọi hình ảnh có dạng hình chử nhật (rectangular) có cạnh dài ngắn định, đuợc tạo matrix pixels 100 hình hình có 300 pix có tổng số pix 30000 pixels Trong php, hình ảnh hệ thống liên hợp (coordinate) Ví dụ: x 300 y 100 Ở góc độ bên trái hình (0,0) Giá trị x tăng dần theo kéo chéo đường từ góc trái xuống góc phải đối diện (x,y), giá trị y tăng dần kéo đường thẳng từ xuống dưới(0,y).Khi cho nội dung vào khung ảnh liên quan tới góc độ trái phía bên Nhìn ví dụ trên, góc liên hợp (180, 50) đựơc đóng lại phía tay phải tệp hình, khoảng đổ xuống Làm ví dụ tương tự đời sống, để xem hình ảnh đựơc diễn tả Bạn tưởng tượng bạn đặt 100 cá màu vàng vào ô có chiều cao 10 chiều dài 10, bạn thấy hình vuông màu vàng Bây bạn thử thay vào vài cá khác màu xanh theo dạng hình chữ H bạn nhận chữ H xanh khung hình vàng Chúc mừng bạn, bạn tạo tệp ảnh động Một điểm cần ý transparency (vô sắc).Transparency có khả tẩy „clear“ pixel Trong trường hợp bạn muốn giấu cá vàng, bạn cần đổi chúng thành vô sắc, sau bạn thấy chữ H màu xanh bao bọc màu trắng transparency kết nối lại với Image-formate Cấu trúc, html thị lên web-site để biểu diễn hình ảnh liên đới tĩnh (relativ statisch ) Dạng hình thay đổi chút năm qua dạng hình quan trọng thường đựơc dùng gif, jpeg, png GIF viết tắc từ Graphics Interchange Format Vài năm trước gif sử dụng phổ biến, tính vô sắc ( transparency ) Dạng màu Gif kết hợp 8-bit, bạn có 256 màu tệp ảnh Do ảnh hưởng sức chứa màu, ảnh Gif chủ thích hợp với khung có diện tích lớn Trong năm gần Unisys Corporation, chủ quyền LZW compression, người toàn quyền việc sử dụng dạng hình gif, quyền chuyên giữ (patent) vào khoảng tháng 2003, nên giới sử dụng dạng gif giảm xuống nhiều JPEG, Joint Photographic Experts Group, dạng hình thích hợp cho ảnh chụp.Dạng jpeg vô sắc màu, nên không thích hợp với toolbars hay Form góc cạnh PNG, Portable Network Graphics, dạng dình hổ trợ nhiều trình duyệt PNG có nhiều điểm lợi gần gif cộng tính vô sắc màu Điểm cần ý PNG không biểu rỏ ràng trình duyệt netscape 4, trình diễn đạt tốt Bạn nên thử loại hình trình duyệt xem có thích ứng không Thủ thuật biến đỏi ảnh PHP GD ANSI-C thư viện cho việc tạo lập hình ảnh động Tương tự php, thư viện gd mã nguồn mở boutell.com bạn vào để tải xuống php chưa có thư viện ( nghĩ không, php cài sẳn rồi, cảm ơn trời phật :-)) Installation thư viện GD: nói ngắn gọn xem file php.ini Tìm dòng ;extension=php_gd2.dll bỏ dấu „ ; „ start apache ok Muốn cho chắn vào trình duyệt gọi tệp xem tv GD bật chưa GD-API bao gồm nhiều function, giúp bạn tạo, sửa tệp tin hình ảnh qua lập trinh php.API bao la không vỏn vẹn phần tạo ứng nhỏ Chúng ta tập trung vào điểm quan trọng : -Phương thức (basic funtions) -Sảo thuật màu (color manipulation) -Vẽ hình (drawing primitive shapes) -Vẽ chữ ( working with text) the basic function Chúng ta bắt đầu với cốt lõi function dùng để tạo hình servergraphic Function nạp (load ) hình từ máy, lưu giử vào phận nhớ ( memory) sau ghi hình vào đĩa cứng (disk) hay chuyển (streaming) đến trình duyệt Creating Images Bạn dùng function imagecreate () để tạo nguồn ảnh để chỉnh đổi Cách gọi : Ressource imagecreate (int x_size, int y_size) Function imagecreate() trả lại cho nguồn (resource) tương đương với ảnh hình giống cú pháp mysql mysql_connect() trả cho mảng dử liệu ( recordset), bạn sử lý trực tiếp vào biến được, có liên quan đến funtion làm biến đổi hình ảnh, vận chuyển source ảnh đến funtion image để làm việc Function cho ta kết ảnh độ phân giải x_size y_size Sử dụng ảnh có (Using Existing Images) Để tạo ảnh trống (blank image) , lấy ảnh từ disk qua funtions sau: resource imagecreatefromjpeg (string filename) // ảnh dạng jpeg Ressource imagecreatefrompng (string filename) // ảnh dạng png Nhiều tương tự funtion imagecreate() Funtions trả cho ta giá trị nguồn ảnh tương đương với tệp ảnh disk , true Nguợc lại funtion trả chuỗi trống ( empty string) false Nếu fopen-wrappers' bật lên ( chỉnh sửa tệp tin php.ini) bạn dùng URL tên tệp ảnh Nhưng coi chừng máy chạy chậm phải tìm chất liệu qua HTTP Mỗi chức dùng URL thay hồ sơ đĩa, chức script phải tìm qua mạng lưới Vì qua mạng lúc chậm thẳng từ đĩa nên máy chạy chậm quan tâm fopen_wrappers chạy tốt với php unix chỉnh sửa Windows kể từ phiên (vers.) 4.3 Truy tìm kích thước tệp ảnh ( Finding an Image's Size) Rất nhiều điểm lợi ứng dụng web cho ta biết kích thước ảnh Chúng ta sử dụng thông tin này:ví dụ cần kích thước xác ảnh để làm popup-window cho thư viện ảnh đặt ảnh theo chiều cao, rộng tag Array getimagesize ( string filename [, array imageìno]) funtion getimagesize() trả cho ta phần tử (elements) array là: element 0: độ ngang ảnh trỏ tham số pixels tệp ảnh element 1: độ cao ảnh trỏ tham số pixels tệp ảnh element 2: trị số (interger) tương đương cho loại ảnh (typ image) (1=gif, 2=JPG, 3=PNG) element 4: chuỗi gắn thêm (add) vào tag để biểu độ cao rộng, vd: „height=100 width=200“ Tham số (parameter) tệp ảnh dự bị chuyển đưa đến dãy array nhằm lấy thêm thông tin ảnh Khi họat động trả lại JPG APP (nhờ thằng google giải thích giùm nhá) khác nằm associative array Truy lùng độ phân giả cao rộng ( retrieving the width and height) Nếu cần đến độ cao rộng ảnh không cần đo thông tin ảnh mãng array cách khó khăn Chúng ta sử dụng funtion imagesx() imagey() để truy tìm độ cao rộng tệp ảnh Int imagex ( resource image) Int imagey ( resource image) Như thấy funtions imagex imagey trả cho ta giá trị độ cao rộng tệp ảnh Cũng cần lưu ý function không giống function getimagesize functions lấy nguồn ảnh (resource) , đường dẫn ảnh (file path) Muốn tạo ảnh bạn nên dùng funtion imagecreate() trước sau đến function imagex() imagey() để lấy tham số ảnh imagecreate() tạo Copy Bóp ảnh ( copy & resizing an a image) Chúng ta dùng coy resize để tạo ảnh Function lợi cho việc làm thư viện hình ảnh thubmnails int imagecopyresized (resource dst_im, resource src_im, int dstX, int dstY,int srcX, int srcY, int dstW, int dstH, int srcW, int srcH) Function copy phần góc (rectangular) nguồn ảnh trao trả chúng đến đích ảnh thật dst_im, src_im – the destination and source image resources int dstX, int dstY – the upper-left corner of the replaced content in the destination image int srcX, int srcY – the upper-left corner of the source content in the source image int dstW, int dstH – the width and height of the rectangular area to replace in the destination image int srcW, int srcH – the width and height of the rectangular area to copy in the source image Nếu phạm vi góc không tương ứng với độ cao rộng khoảng nguồn ảnh đích ảnh Function họat động tương đối copy vùng (regions) với lọai ảnh (same image) (vd: dst_im tuơng ứng với src_im ) Tuy nhiên vùng ảnh(régions) nằm vùng có kết (results) ta liệu trước Cho ảnh hiệ thị trình duyệt ( outputting to the browser) Khi chỉnh sửa ảnh xong, cần tìm giải pháp cho ảnh trình duyệt Để làm việc dùng function imagepng() and imagejpeg() int imagepng (resource image [, string filename]) int imagejpeg (resource image [, string filename]) function xuất liệu nguyên thủy (raw) ảnh đến trinh duyệt Nếu nguồn ảnh tên tệp (file name) , ghi chép thông tin vào tệp ảnh Tên tệp phải nằm đĩa cứng (disk) php phải có toàn quyền (chmod 777) để chép tin tệp Ta cần dùng funtion header() trình duyệt muốn đưa ảnh thị Xóa bỏ nhớ ( Reclaiming used Memory) Sau giao chuyển hình đến trinh duyệt cần loại bỏ phần tồn phận nhớ qua function : imagedestory() int imagedestory ( resource image) Cách sử dụng Để dùng function cần tạo thubmnail để nạp (load) hình kéo nhỏ xuống 1/8 so với ảnh nguyên thủy , lưu vào đĩa PHP Code: > ... Thủ thuật biến đỏi ảnh PHP GD ANSI-C thư viện cho việc tạo lập hình ảnh động Tương tự php, thư viện gd mã nguồn mở boutell.com bạn vào để tải xuống php chưa có thư viện ( nghĩ không, php cài... Installation thư viện GD: nói ngắn gọn xem file php.ini Tìm dòng ;extension=php _gd2 .dll bỏ dấu „ ; „ start apache ok Muốn cho chắn vào trình duyệt gọi tệp xem tv GD bật chưa GD- API... phạm vi góc không tương ứng với độ cao rộng khoảng nguồn ảnh đích ảnh Function họat động tương đối copy vùng (regions) với lọai ảnh (same image) (vd: dst_im tuơng ứng với src_im ) Tuy nhiên vùng