Một thập kỷ trước, chỉnh sửa một ảnh trên một website nghĩa là tải nó lên, chờ một máy chủ làm việc, và tải kết quả về. Ngày nay một trình duyệt có thể nén một ảnh 30 MB, chuyển một PNG sang WebP, hay đổi kích thước một lô ảnh mà không bao giờ liên hệ một máy chủ. Hai công nghệ khiến sự chuyển dịch đó khả thi: Canvas và WebAssembly. Chẳng cái nào bí ẩn một khi bạn thấy mỗi cái làm gì.
Canvas: một bề mặt vẽ với quyền truy cập cấp pixel

Mọi trình duyệt hiện đại đều đi kèm Canvas API — một hình chữ nhật trống bạn có thể vẽ lên bằng JavaScript. Sức mạnh thực sự của nó cho công cụ ảnh không phải vẽ hình; đó là Canvas cho mã quyền truy cập trực tiếp vào từng pixel của một ảnh.
Khi bạn nạp một bức ảnh vào một canvas, trình duyệt đưa cho mã của bạn một mảng số: các giá trị đỏ, xanh lá, xanh dương, và alpha (độ trong suốt) cho mỗi pixel. Từ đó, các thao tác thông thường trở nên đơn giản:
- Đổi kích thước nghĩa là lấy mẫu lưới pixel đó thành một lưới nhỏ hơn hay lớn hơn.
- Cắt nghĩa là sao chép một vùng hình chữ nhật vào một canvas mới.
- Xoay và lật là các phép biến đổi hình học áp dụng trước khi vẽ.
- Chuyển đổi định dạng diễn ra khi bạn xuất canvas — yêu cầu một JPEG, một PNG, hay một WebP và trình duyệt mã hóa các pixel theo đó.
Tất cả những điều này chạy trên chính thiết bị của bạn, dùng CPU của bạn và, ở nơi có sẵn, GPU của bạn. Không gì được tải lên, vì các pixel không bao giờ rời khỏi trang. Đó là lý do Công cụ Chuyển đổi ảnh có thể biến một PNG thành một WebP ngay khoảnh khắc bạn thả nó vào — không có vòng khứ hồi để chờ.
WebAssembly: tốc độ gần như thuần bên trong trình duyệt

Canvas xử lý các phép biến đổi phổ biến, nhưng một số công việc cần cơ bắp tính toán nghiêm túc — mã hóa JPEG chất lượng cao, tối ưu PNG, chạy một mô hình AI để cắt một cái nền. JavaScript đơn thuần có thể quá chậm cho những việc này. Đó là nơi WebAssembly (thường rút gọn thành Wasm) xuất hiện.
WebAssembly là một định dạng gọn, cấp thấp mà trình duyệt có thể thực thi ở gần tốc độ thuần. Nhà phát triển lấy mã nhanh, đã được thử lửa viết bằng các ngôn ngữ như C, C++, hay Rust — cùng các thư viện chạy phần mềm ảnh desktop — và biên dịch nó thành Wasm. Trình duyệt sau đó chạy mã đó trong một môi trường chặt chẽ, được cách ly, nhanh hơn nhiều so với JavaScript tương đương.
Trong thực tế điều này nghĩa là một tab trình duyệt giờ có thể làm công việc từng đòi hỏi một máy chủ hay một ứng dụng desktop: mã hóa ảnh với nén cấp chuyên nghiệp, gỡ siêu dữ liệu, hay chạy một mạng nơ-ron để xóa nền — tất cả cục bộ.
Vì sao xử lý cục bộ vừa riêng tư vừa nhanh
Đặt Canvas và WebAssembly cùng nhau và các lợi ích tự nhiên nảy ra.
Quyền riêng tư mang tính cấu trúc, không phải một lời hứa. Vì các pixel ở lại trong trang và việc xử lý chạy trên CPU của bạn, không có bước tải lên. Không có bản sao máy chủ của file bạn để lưu, ghi log, cache, hay huấn luyện — vì file chưa bao giờ được truyền đi. Bạn không phải tin một chính sách riêng tư; bạn có thể xác minh nó bằng cách bật chế độ máy bay và ngắm công cụ vẫn chạy.
Tốc độ đến từ việc cắt bỏ hoàn toàn mạng. Bước chậm nhất của một công cụ máy chủ thường là đưa file của bạn lên rồi về. Gỡ bỏ điều đó, và một ảnh 40 MB xử lý nhanh gần bằng một ảnh 40 KB. Cũng không có hàng đợi — thiết bị của bạn làm việc riêng trên ảnh của bạn, không phải hàng nghìn ảnh của người khác.
Có một phần thưởng mà hầu hết mọi người không mong đợi: vì cả công cụ chỉ là mã và tài sản, một trình duyệt có thể lưu cache nó. IMG.DIY là một PWA với một service worker, nên sau lần truy cập đầu tiên các công cụ được lưu trên thiết bị của bạn và vẫn chạy offline — ở chế độ máy bay, trên một chuyến bay, ở bất cứ đâu. Nén và chuyển đổi không cần kết nối chút nào.
Những đánh đổi, nói thật
Xử lý trong trình duyệt không phải phép màu và không phải không có giới hạn. Các lô rất lớn có thể làm căng bộ nhớ của một điện thoại yếu, vì công việc dùng tài nguyên của thiết bị bạn thay vì của một trung tâm dữ liệu. Và vài tính năng thực sự cần mạng — bất cứ thứ gì gọi một dịch vụ bên ngoài, như một lần kiểm định tốc độ trang, không thể chạy offline. Xóa nền là một ca trung gian: nó chạy cục bộ, nhưng chỉ sau một lần tải file mô hình.
Nhưng với các công việc hàng ngày — nén, chuyển đổi, đổi kích thước, cắt, xoay — trình duyệt giờ là một xưởng ảnh hoàn chỉnh, riêng tư, nhanh mà tình cờ sống trong một tab. Không tải lên, không máy chủ, không chờ đợi.
