2011-01-08 41 views
5
imagecopyresized (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) 

Đây là những gì tôi muốn làm: Tôi có một hình ảnh đó là 600x1000px về kích thước, và tôi muốn tạo ra một ngón tay cái đó là 100x100px sau khi thay đổi kích thước hình ảnh để 300x500px, tọa độ x cho điểm trên cùng bên trái của hình vuông ngón tay cái phải ở 100 (src x) và 120 (src y).imagecopyresampled để thay đổi kích thước và cắt một hình ảnh - không trả lại kết quả mong đợi

Theo những gì tôi hiểu từ hướng dẫn, lệnh nên

$dst_image = imagecreatetruecolor(100,100); 
$src_image = imagecreatefromjpeg('/home/sandbox/imagetoresize.jpg'); 
imagecopyresized ($dst_image, $src_image, 0, 0, 100, 120, **300 , 500 , 600 , 1000**) 

Nó được cắt xén hình ảnh tốt, nhưng nó không được thay đổi kích thước một cách chính xác. Tôi không bao giờ có nó để phù hợp với những gì tôi thấy trong trình soạn thảo hình ảnh của tôi (GIMP). Tôi đang làm gì sai? Tôi xác nhận rằng tất cả các con số là chính xác, nhưng nó luôn luôn chuyển lên hoặc xuống bất kể tôi làm gì.

+0

những gì bạn đang làm trong hình ảnh nguồn của bạn là cắt một mảnh từ trái x = 100 pixel sang phải x = 400 pixel trong chiều rộng 600 pixel, do đó, nó không được căn giữa. và sau đó sử dụng tối đa 120 pixel và dưới cùng là 620 pixel trong tổng chiều cao 1000 pixel để nó không được căn giữa theo cách đó. – dqhendricks

+0

sau đó, trong hình ảnh đích của bạn, bạn đang bắt đầu ở trên cùng bên trái và in hình ảnh 300x500 pixel thành hình ảnh 100x100, vì vậy, 200 pixel và 400 pixel dưới cùng sẽ bị cắt. – dqhendricks

+0

hiển thị cho chúng tôi hình ảnh nguồn và đích mong muốn từ trình chỉnh sửa hình ảnh của bạn và có thể chúng tôi sẽ hiểu rõ hơn về những gì bạn đang cố gắng thực hiện. – dqhendricks

Trả lời

10

Đây là liên kết đến hàm tôi đã viết bằng PHP GD để định lại kích thước bất kỳ hình ảnh có kích thước nào thành bất kỳ kích thước tùy ý nào. Nó có một giải thích, và các tùy chọn để sử dụng crop-to-fit hoặc letterboxing để phù hợp với tỷ lệ khung hình đích.

http://www.spotlesswebdesign.com/blog.php?id=1

cập nhật

nó nên trông như thế này.

$dst_image = imagecreatetruecolor(100,100); 
$src_image = imagecreatefromjpeg('/home/sandbox/imagetoresize.jpg'); 
imagecopyresized ($dst_image, $src_image, 0, 0, 100, 120, 100, 100, 400, 400); 

lấy một hình vuông 400x400 từ nguồn và sao chép vào hình vuông 100x100 ở đích. phía trên bên trái của hình vuông nguồn là 100 x và 120 y. x và y đại diện cho số pixel từ góc trên cùng bên trái.

+1

bài đăng trên blog tuyệt vời, cảm ơn bạn đã chia sẻ. –

+0

Xin chào, tôi gặp sự cố với ImageCreateTrueColor. Tôi có thể cho hơn 3000 ở cả chiều cao và chiều rộng không? – user2003356

+0

@ user2003356 về mặt lý thuyết, có, nhưng nó sẽ phụ thuộc vào giới hạn bộ nhớ php của máy chủ của bạn. – dqhendricks

3

Vâng, điều đó đã khắc phục được sự cố.

Đối với nhân viên của Google: Những gì tôi về cơ bản cần làm là có chiều rộng nguồn và chiều cao nguồn liên kết với chiều rộng và chiều cao thực tế của khu vực mà tôi sẽ cắt trong hình ảnh nguồn. Điều đó có nghĩa rằng mã cần thiết để được:

imagecopyresized ($dst_image, $src_image, 0, 0, 200, 240, 100, 100, 200, 200); 

Vì vậy, các biến thực sự có nghĩa như sau: $ src_x = x phối hợp của các điểm trên bên trái của hình vuông trong bản gốc. Vì bản gốc gấp hai lần kích thước của phiên bản đã thay đổi kích cỡ mà từ đó ngón tay cái sẽ được trích xuất, điều này sẽ là 200 ((original_width/resized_width) * x).

$ src_y = điều tương tự, nhưng với toạ độ y.

$ dst_w = chiều rộng của hình thu nhỏ được tạo ra - 100.

$ dst_h = chiều cao của hình thu nhỏ được tạo ra - 100.

$ src_w = chiều rộng của khu vực mà tôi sẽ cắt từ gốc ((original_width/resized_width) * $ dst_w)

$ src_h = chiều cao của khu vực mà tôi sẽ cắt từ bản gốc ((original_width/resized_width) * $ dst_h)


dqhendricks: Cảm ơn rất nhiều sự giúp đỡ của bạn, tôi thực sự đánh giá cao nó. Tôi đã gãi đầu của tôi trên này trong nhiều giờ.

+0

Không sao cả. Mừng vì tôi có thể giúp. – dqhendricks

Các vấn đề liên quan