Trong một bài viết trước tôi đã giới thiệu với các bạn về cách để tạo ra một file ảnh có dung lượng theo ý muốn chính xác đến từng byte.

Tham khảo tại đây

Trong quá trình áp dụng cách này, tôi phát hiện ra cách làm cơ bản này còn có một số hạn chế như sau:

  1. Luôn mất công tìm File ảnh gốc có dung lượng tương đương với file cần tạo (hơn hoặc kém một chút)

  2. Đôi khi những file gốc không đẹp như chúng ta mong muốn, nhưng vẫn phải sử dụng vì nó có dung lượng gần với mong muốn nhất.

5.jpg

  1. Nếu file ảnh gốc có dung lượng lớn hơn ảnh cần tạo thì chúng ta chắc chắn phải xóa đi 1 số byte của Base64Value. Điều này gây ảnh hưởng đến thẩm mỹ của những file ảnh bạn tạo ra, sẽ có một đoạn data bị hỏng, gây lỗi trên ảnh được tạo ra.

1111.png

Vậy có cách nào để từ một image có vài chục KB mà bạn rất yêu thích chúng ta có thể sinh ra được các image có dung lượng bao nhiêu tùy ý mà không hề bị sứt mẻ mất bất kỳ điểm ảnh nào?

Ở đây tôi có 1 file gốc 540.990 bytes

hoa-lavender-kho-2(5).jpg

Vẫn cách làm như bài viết trước, nhưng áp dụng thêm một số thủ thuật đơn giản thôi chúng ta sẽ khắc phục được những nhược điểm trên.

Kết quả là những file đẹp như ý, có dung lượng 1.000.000 bytes hoặc hơn nhiều lần (bản thân tôi đã thử tạo được file 20.000.000 bytes từ file gốc này)

1.000.000 bytes.JPG

Và đây là cách làm của tôi:

  1. Chọn 1 file ảnh đẹp theo sở thích của bạn. Lưu ý, file có dung lượng nhỏ hơn dung lượng bạn mong muốn.
  2. Sử dụng http://base64image.org/ để biến file ảnh thành Base64value
  3. Nhân đôi hoặc nhân nhiều lần value này lên cho dung lượng gần với dung lượng bạn đang mong muốn.
  4. Xóa hoặc thêm text vào phần cuối cùng của Base64Value cho đạt dung lượng chính xác mà bạn mong có được.
  5. Thêm đoạn text "data:image/jpeg;base64, " vào trước của Base64Value vừa chỉnh sửa.
  6. Decode Base64Value thành image bằng cách dùng: http://base64online.org/decode/# và download về để sử dụng.

Bí kíp ở đây chính là:

  1. Chọn file gốc nhỏ hơn file mong muốn, khi edit, chỉ cần phần Base64value gốc được sinh ra ở step 2 được giữ nguyên thì đảm bảo chất lượng của ảnh sẽ không hề bị ảnh hưởng. Những thao tác thêm/xóa sẽ chỉ được thực hiện trên phần string được thêm mới vào ở step 3.

  2. Bạn có thể từ file nhỏ tạo ra 1 file chuẩn có dung lượng là 1MB. Rồi từ file 1MB đó bạn nhân Base64Value đó lên 2 lần để được file 2MB, nhân 3 lần để được file 3MB… Quá tiện phải không nào?

  3. Những phần bạn nối thêm đằng sau Base64Value gốc có thể là là chính nó, cũng có thể là Base64value của một hoặc nhiều file ảnh hoàn toàn khác, điều đó không sao, ảnh các bạn thu về sẽ là ảnh tương ứng với Base64Value đầu tiên. Để cho dễ tưởng tượng thì việc này có ý nghĩa tương đương với việc bạn nối 2 hoặc nhiều ảnh với nhau và ảnh hiển thị là ảnh đầu tiên trong chuỗi nối đó.

Chú ý:

  • Khi nhân, chỉ nhân Base64value mà thôi, đoạn text nhận dạng "data:image/jpeg;base64, " chỉ được thêm vào đầu string value sau khi chỉnh sửa.
  • Sau khi nhân lên và chuyển sang dạng image, có thể sẽ bị thừa một vài byte (phụ thuộc vào số lần nhân giá trị gốc nhiều hay ít, thông thường mỗi lần nhân lên sẽ bị thừa 1 byte) vì vậy bạn chỉ cần edit lại một chút thôi là đã có file chính xác rồi

Đó là một vài chia sẻ từ kinh nghiệm tạo data test của tôi, hy vọng sẽ giúp ích được nhiều cho các bạn.