Gặp vấn đề khi thay avatar từ url khi tạo danh bạ bằng Google App Script và Google Contacts

vẫn không được, đã resize được nhưng khi chạy vẫn báo lỗi quá kích thước ah bạn ơi

Rồi, sau một hồi tìm hiểu thì xem ra phải resize ảnh bên ngoài rồi :rofl:. Vào mấy trang resize ảnh, up ảnh lên, resize các thứ rồi up lên server nào đó, lấy url rồi áp dụng vào code mà từ trước đến nay bạn hay dùng. Có vẻ như bên Google Script không hỗ trợ resize ảnh rồi.

1 Like

cách đó có vẻ không ổn, vì số lượng hình ảnh rất nhiều gần 10k hình.

Số lượng chừng đó thì không nên dùng App Script, thay vào đó bạn nên code bên ngoài, sử dụng thư viện xử lí hình ảnh rồi dùng API của thằng Google Contacts

1 Like

hôm bữa thấy có 1 anh làm được mak không share code, chỉ share thành quả. Mak không biết anh ấy làm kiểu j

Anh đó dùng App Script à :thinking:?

đúng rồi, chỉ share cái thành quả kèm mấy cái code cơ bản trên hình thôi, cái quan trọng nhất lại làm mờ

Vậy anh đó làm 10k hình hay làm mỗi vài hình :thinking: ?

hiện mình chỉ cần vài hình là ok rồi. nếu ok mình mới chỉnh sửa tiếp.
Mình đọc trên này thì thấy đâu cần phải resize ảnh đâu ta
https://developers.google.com/people/api/rest/v1/people/updateContactPhoto

Sau khi tìm hiểu thêm trên Google (chủ yếu là Stack Overflow) thì có 2 cách:

  1. Dùng Google Docs: Tạo một document mới, lấy object body, chèn ảnh vào object body đó rồi resize lại, encode sang base64:
const img_url = 'https://cdn-images.kiotviet.vn/dienmaythanhvong/avatar-0aebe69212a1450699375243f2c5cb1e.jpg'
let img_blob = UrlFetchApp.fetch(img_url).getBlob() //Lấy ảnh ở dạng Blob
let doc = DocumentApp.create("Image Sizing"); //Để tên gì cũng được
let doc_body = doc.getBody() //Lấy body của document
let img_obj = doc_body.insertImage(0, img_blob)
img_obj.setWidth(96)
       .setHeigth(96)
// Resize ảnh
let data = Utilities.base64EncodeWebSafe(img_obj.getBlob().getBytes())
Theo một bình luận trên Stack Overflow thì có thể bỏ phần getBlob() đi
const img_url = 'https://cdn-images.kiotviet.vn/dienmaythanhvong/avatar-0aebe69212a1450699375243f2c5cb1e.jpg'
let img = UrlFetchApp.fetch(img_url) //Lấy ảnh
let doc = DocumentApp.create("Image Sizing"); //Để tên gì cũng được
let img_obj = doc.getBody()
                 .insertImage(0, img)
                 .setWidth(96)
                 .setHeigth(96)
// Trông giống giống Promise chain
let data = Utilities.base64EncodeWebSafe(img_obj.getBytes())

Ý tưởng gốc từ Stack Overflow:


2. Dùng Google Drive: Lười ghi quá nên là bạn qua đây tham khảo:

2 Likes

Mình đã thử tạo trên Driver như vẫn không được, khi mình getId lại thì nó không đúng. Mong bạn giúp mình với. Mình cảm ơn

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?