Thay đổi kích thước hình ảnh JavaScript

Thật dễ dàng để hiển thị phiên bản đã thay đổi kích thước hoặc cắt xén của hình ảnh trên trang web bằng CSS. Tuy nhiên, điều này không thay đổi dữ liệu hình ảnh gốc. Điều gì sẽ xảy ra nếu bạn muốn tạo một phiên bản hình ảnh đã cắt hoặc thay đổi kích thước thực tế cho khách truy cập hoặc khách hàng của mình?

Chúng tôi đã xuất bản một số hướng dẫn về cách tạo hình thu nhỏ của hình ảnh bằng PHP hoặc áp dụng cắt xén, thay đổi kích thước và các bộ lọc khác bằng PHP. Trong hướng dẫn này, bạn sẽ học cách cắt hoặc thay đổi kích thước hình ảnh bằng JavaScript

Đây là bản trình diễn trực tiếp về mã cắt xén hình ảnh của chúng tôi đang hoạt động

Và đây là một ví dụ về mã thay đổi kích thước

Những điều cần ghi nhớ

Chúng tôi sẽ cần quyền truy cập vào dữ liệu hình ảnh gốc để tạo phiên bản mới của hình ảnh được cắt hoặc thay đổi kích thước theo các kích thước cụ thể. Chúng ta có thể làm điều đó với sự trợ giúp của phần tử

// Referencing an Image loaded in the DOM

89

Phần tử HTML canvas đã xuất hiện từ lâu và chúng ta có thể sử dụng nó để vẽ tất cả các loại đồ họa. Có hàng trăm thư viện mà bạn có thể sử dụng để tạo biểu đồ, vectơ và hoạt ảnh bằng API canvas. Chúng tôi sẽ sử dụng API trong hướng dẫn này để tạo ảnh cắt và thay đổi kích thước hình ảnh của bạn

Một điều mà bạn cần lưu ý là để có quyền truy cập vào dữ liệu hình ảnh để thao tác với canvas yêu cầu bạn phải có hình ảnh trên cùng một máy chủ hoặc sử dụng thuộc tính

// Referencing an Image loaded in the DOM

90 để cho biết rằng canvas có quyền truy cập, sửa đổi,

1. Tải dữ liệu hình ảnh

Điều đầu tiên chúng ta cần làm là tải dữ liệu hình ảnh của mình. Bạn có thể làm điều đó bằng cách tham chiếu một hình ảnh đã được tải trong DOM hoặc bằng cách tạo một hình ảnh mới bằng cách sử dụng hàm tạo

// Referencing an Image loaded in the DOM

91. Đây là một ví dụ

1
________0____5_______
const originalImage = document.querySelector("img.puppy");
3
4
// Using the Image() constructor

5
let imagePath = 'images/puppy.jpg';
6
// Referencing an Image loaded in the DOM

0_______0_______1
// Referencing an Image loaded in the DOM

2

2. Vẽ hình ảnh trên Canvas

Bây giờ chúng ta sẽ sử dụng trình lắng nghe sự kiện để đợi hình ảnh tải và sau đó lấy chiều rộng và chiều cao ban đầu của nó. Chiều rộng và chiều cao này được sử dụng để xác định tỷ lệ khung hình của hình ảnh. Có quyền truy cập vào tỷ lệ khung hình sẽ cho phép chúng tôi thay đổi kích thước hình ảnh mà không kéo giãn hình ảnh theo bất kỳ hướng nào, để chúng tôi có thể tránh được bất kỳ biến dạng nào

Phương thức

// Referencing an Image loaded in the DOM

92 của canvas API sẽ có một vai trò quan trọng ở đây. Chúng tôi có thể sử dụng nó để thay đổi kích thước và cắt hình ảnh của mình bằng cách chuyển một số đối số thích hợp. Nó có thể chấp nhận ba, năm hoặc chín tham số và có cú pháp sau

1
// Referencing an Image loaded in the DOM

4_______5_______
// Referencing an Image loaded in the DOM

6
3
// Referencing an Image loaded in the DOM

8

Chúng tôi sẽ sử dụng phiên bản thứ hai cho chức năng thay đổi kích thước và phiên bản thứ ba để thực hiện cắt xén. Tham số đầu tiên là thành phần hình ảnh mà bạn muốn vẽ trên canvas. Các tiền tố

// Referencing an Image loaded in the DOM

93 và
// Referencing an Image loaded in the DOM

94 biểu thị nguồn và đích cho hình ảnh gốc và hình ảnh mới của chúng tôi. Điều này có nghĩa là
// Referencing an Image loaded in the DOM

95 và
// Referencing an Image loaded in the DOM

96 đại diện cho tọa độ trên cùng bên trái của hình ảnh. Tương tự,
// Referencing an Image loaded in the DOM

97/_______0_______98 và
// Referencing an Image loaded in the DOM

99/
2
00 đại diện cho chiều rộng và chiều cao của hình ảnh

Tôi đã đánh dấu các giá trị nguồn trên hình ảnh con chó con từ Pixabay mà chúng tôi sẽ cắt xén để cung cấp cho bạn ý tưởng về ý nghĩa của các tham số này

Thay đổi kích thước hình ảnh JavaScript
Thay đổi kích thước hình ảnh JavaScript
Thay đổi kích thước hình ảnh JavaScript

Góc trên bên trái của hình ảnh được coi là (0, 0) và góc dưới bên phải tương ứng với (

2
01,
2
02). Điều này có nghĩa là chúng ta có thể lấy toàn bộ hình ảnh bằng cách đặt các giá trị của
2
03,
2
04,
// Referencing an Image loaded in the DOM

97 và
// Referencing an Image loaded in the DOM

98 thành 0, 0, chiều rộng hình ảnh và chiều cao hình ảnh tương ứng

Thay đổi kích thước hình ảnh

Giả sử chúng ta muốn thay đổi kích thước hình ảnh con chó con sao cho nó chỉ rộng 500 pixel. Chúng tôi có thể sử dụng mã JavaScript sau để thay đổi kích thước hình ảnh của mình. Chúng tôi sẽ sửa đổi mã này sau để trở thành một chức năng có thể gọi được để chiều rộng không còn được mã hóa cứng và chiều cao có thể được đặt tùy ý khi người dùng không muốn giữ nguyên tỷ lệ khung hình

1
2
0_______5_______
3
2
3
4
___
2
5
5
12_______5_______8
// Referencing an Image loaded in the DOM

1
const originalImage = document.querySelector("img.puppy");
0
const originalImage = document.querySelector("img.puppy");
1
const originalImage = document.querySelector("img.puppy");
2
const originalImage = document.querySelector("img.puppy");
3
const originalImage = document.querySelector("img.puppy");
4
const originalImage = document.querySelector("img.puppy");
5
const originalImage = document.querySelector("img.puppy");
6
const originalImage = document.querySelector("img.puppy");
7
const originalImage = document.querySelector("img.puppy");
9_______7_______0_______7_______1_______7_______4_______

Bên trong trình xử lý sự kiện của chúng tôi, chúng tôi sử dụng thuộc tính

2
07 và
2
08 của đối tượng Hình ảnh của chúng tôi để lấy kích thước của nó. Chúng tôi sử dụng thông tin này để lấy tỷ lệ khung hình của hình ảnh. Giá trị của biến
2
09 xác định độ rộng mà chúng ta muốn hình ảnh khi nó được thay đổi kích thước. Sau đó, chúng tôi tính toán
2
10 bằng cách chia chiều rộng cho tỷ lệ khung hình được tính toán của chúng tôi

Các giá trị này cũng được sử dụng để đặt chiều rộng và chiều cao của canvas. Chúng tôi chỉ cần sử dụng phương pháp

// Referencing an Image loaded in the DOM

92 để vẽ hình ảnh của chúng tôi trên canvas sau đó

Cắt hình ảnh

Bạn có thể nhớ lại từ cuộc thảo luận trước đây của chúng ta rằng việc gọi phương thức

// Referencing an Image loaded in the DOM

92 với năm tham số chỉ yêu cầu chúng ta chuyển tọa độ và kích thước đích. Hình ảnh nguồn đã được vẽ toàn bộ trên canvas mới. Tuy nhiên, chúng ta cũng có thể chuyển tọa độ và kích thước nguồn tùy ý cho phương thức
// Referencing an Image loaded in the DOM

92 để chỉ vẽ một phần của hình ảnh nguồn. Đây là một triển khai rất cơ bản để cắt hình ảnh trong JavaScript

1
2
0_______5_______
3
0_______7_______
4
0
4
8_______2
5
6
8_______5_______0_______1
4
7
const originalImage = document.querySelector("img.puppy");
0
const originalImage = document.querySelector("img.puppy");
2
// Using the Image() constructor

0
const originalImage = document.querySelector("img.puppy");
4
// Using the Image() constructor

2
const originalImage = document.querySelector("img.puppy");
5_______6_______7_______9_______5_______6_______9_______7_______4

Chúng tôi sẽ cải thiện mã này sau để các giá trị không được mã hóa cứng mà được lấy từ một hàm có thể gọi được.

2
14 cũng sẽ được xác định tự động từ
2
15 và tỷ lệ khung hình khi người dùng không chuyển giá trị của nó

3. Đang tải xuống hình ảnh

Trừ khi mục tiêu chỉ đơn giản là hiển thị hình ảnh đã cắt hoặc thay đổi kích thước trên trang web, bạn cũng có thể muốn cung cấp cho người dùng khả năng tải xuống hình ảnh. Chúng ta có thể đạt được điều này với nỗ lực tối thiểu bằng cách sử dụng phương pháp

2
16. Nó chấp nhận hai tham số cho phép bạn chỉ định định dạng tệp và chất lượng hình ảnh

Giả sử bạn có một nút tải xuống trên trang web của mình với HTML sau

1
// Using the Image() constructor

9

Sau đó, chúng tôi có thể sử dụng JavaScript sau để tạo một liên kết giả tạm thời cho phép chúng tôi tải xuống hình ảnh của mình

1
5
1
2
3
5
4
4
10_______6
5
10_______8
6
11_______0
// Referencing an Image loaded in the DOM

1
let imagePath = 'images/puppy.jpg';
2
const originalImage = document.querySelector("img.puppy");
0
3
4

Nhấp vào nút tải xuống ngay bây giờ sẽ bắt đầu tải xuống một tệp có tên là con chó con bị cắt. jpg

4. Tạo chức năng cắt và thay đổi kích thước có thể tái sử dụng

Rất nhiều giá trị trong mã của chúng tôi hiện đang được mã hóa cứng. Điều này hạn chế nghiêm trọng khả năng sử dụng lại của mã. Hãy viết lại nó theo cách cho phép chúng ta gọi một chức năng duy nhất để cắt, thay đổi kích thước và tải xuống hình ảnh. Đây là mã thay đổi kích thước hoặc cắt bất kỳ hình ảnh đã cho nào theo kích thước đã chỉ định và sau đó lưu nó với một tên nhất định

1
let imagePath = 'images/puppy.jpg';
6
2
let imagePath = 'images/puppy.jpg';
8
3
6
0
4
5
6
3
6
6
5
// Referencing an Image loaded in the DOM

1
const originalImage = document.querySelector("img.puppy");
0
6
8
const originalImage = document.querySelector("img.puppy");
2
const originalImage = document.querySelector("img.puppy");
4
// Referencing an Image loaded in the DOM

01
const originalImage = document.querySelector("img.puppy");
5
// Referencing an Image loaded in the DOM

03
const originalImage = document.querySelector("img.puppy");
7
const originalImage = document.querySelector("img.puppy");
9
// Referencing an Image loaded in the DOM

06
3
1
3
3
// Referencing an Image loaded in the DOM

09
// Referencing an Image loaded in the DOM

10
// Referencing an Image loaded in the DOM

11
// Referencing an Image loaded in the DOM

12
// Referencing an Image loaded in the DOM

13
// Referencing an Image loaded in the DOM

14
// Referencing an Image loaded in the DOM

15
// Referencing an Image loaded in the DOM

16
// Referencing an Image loaded in the DOM

17
// Referencing an Image loaded in the DOM

18
// Referencing an Image loaded in the DOM

19
// Referencing an Image loaded in the DOM

20
// Referencing an Image loaded in the DOM

21
// Referencing an Image loaded in the DOM

22
// Referencing an Image loaded in the DOM

23
// Referencing an Image loaded in the DOM

24
// Referencing an Image loaded in the DOM

25
// Referencing an Image loaded in the DOM

26
// Referencing an Image loaded in the DOM

27
// Referencing an Image loaded in the DOM

28
// Referencing an Image loaded in the DOM

29
// Referencing an Image loaded in the DOM

30
// Referencing an Image loaded in the DOM

31
// Referencing an Image loaded in the DOM

32
let imagePath = 'images/puppy.jpg';
8
// Referencing an Image loaded in the DOM

34
6
0
// Referencing an Image loaded in the DOM

36
// Referencing an Image loaded in the DOM

37
6
3
// Referencing an Image loaded in the DOM

39
6
5________0__

Suy nghĩ cuối cùng

Trong hướng dẫn này, chúng ta đã học cách cắt và thay đổi kích thước Hình ảnh trong JavaScript bằng API canvas. Tất cả những gì chúng ta cần làm là vẽ hình ảnh trên khung vẽ bằng phương pháp

// Referencing an Image loaded in the DOM

92 và sau đó chuyển đổi nó thành dữ liệu hình ảnh bằng phương pháp
2
16

Vì chúng tôi đã tải hình ảnh trên khung vẽ, bạn nên thử triển khai chức năng bổ sung như cho phép người dùng chuyển một giá trị phân số để đặt kích thước mới đối với hình ảnh gốc.  

Làm cách nào để cắt hoặc thay đổi kích thước hình ảnh bằng JavaScript?

Một cách phổ biến để cắt hình ảnh trong JavaScript là sử dụng phần tử HTML5 .
Bước 1. Tạo Canvas trong HTML. .
Bước 2. Tạo tệp JavaScript và chức năng cắt. .
Bước 3. Tải hình ảnh. .
Bước 4. Gọi hàm drawImage()

Làm cách nào để thay đổi kích thước canvas JavaScript?

Thay đổi kích thước canvas nhanh chóng khá dễ dàng. Để làm điều đó, chỉ cần đặt thuộc tính chiều rộng và chiều cao của đối tượng Canvas, sau đó vẽ lại nội dung canvas . Tranh sơn dầu. chiều rộng = 600; .

Làm cách nào để giảm kích thước tệp trong JavaScript?

Làm cho JS tải nhanh hơn trong trình duyệt .
Giảm lượng JS bạn sử dụng để xây dựng trang. .
Sử dụng các tệp JS được rút gọn. .
Tự lưu trữ JS của bên thứ ba nếu có (hoặc sử dụng nhân viên dịch vụ).
Nén JS. .
Sử dụng đẩy và tải trước cho JS quan trọng. .
Loại bỏ mã chết bằng rung cây