Hỏi về resize hình trong nodejs



  • Mình có chức năng upload hình cho bài viết. làm thế nào đề hình sau khi upload có thể dùng để làm thumbnail ( resize hoặc scale bằng gm ) nhưng mà khi resize hay scale vẫn không như ý mình mong muốn và nó vẫn bị bể .
    Thanks



  • Khi đặt câu hỏi về vấn đề này, bạn cần đưa ra hình ảnh trước và sau khi resize, câu lệnh mà bạn sử dụng để resize và mô tả ảnh kỳ vọng. Có như vậy thì người đọc mới có thể hiểu và đưa ra câu trả lời tốt nhất cho bạn.



  • Dùng free API đi bạn, hiện mình đang dùng thằng này thấy khá ổn.
    https://rsz.io/

    NHAN NGUYEN

    2


  • 0_1464927600111_Selection_012.png code cua mình đây. kết quả ra hình mờ và không đúng size cũng như nó bị bể ea .



  • Mình dùng https://github.com/EyalAr/lwip

    dùng Rất tốt.



  • sau khi resize bạn dùng thêm garvity nữa nhé
    var imgGm = gm(readstream, filename).resize(new_width, new_height, '^').gravity('Center').crop(new_width, new_height).write(thumbFilePath, function (err) {});



  • vẫn không được bạn ơi. hình ban đầu của mình 0_1464934666088_12472596_805969859537670_5947891590051208338_n.jpg
    hình sau khi resize như code trên 0_1464934724613_img_240_240_thumbnail_jucBByGP4wVMeHI0v9pl.jpg





  • mình test thử thế này thấy oke mà

    var gm = require('gm').subClass({ imageMagick: true });
    var imgpath = __dirname + '/img.jpg';
    gm(imgpath)
    .resize(500, 200, '^')
    .gravity('Center')
    .crop(500, 200)
    .write(__dirname + '/2.jpg', function(err, result) {
    console.log(err);
    console.log(result);
    });



  • có hình được có hình không được đó bạn. mình mới test lại thì nó ra thế này
    Hình gốc : 0_1464937331068_hgo3.jpg
    hình resize
    0_1464937357640_img_240_240_thumbnail_E1mu8Na18os9R1qxG1Rd.jpg



  • Mình vẫn chưa rõ về vấn đề kích thước ảnh. Kích thước bạn nhận được là bao nhiêu? Kích thước mong muốn là bao nhiêu?

    Còn về vấn đề chất lượng ảnh, hàm scale chú trọng vào performance nên chỉ mặc định sử dụng filter box nên chất lượng ảnh không cao. Nếu bạn quan tâm đến chất lượng ảnh, bạn nên sử dụng hàm resize thay cho scale vì hàm resize sử dụng filter lanczos, chạy chậm hơn nhưng cho chất lượng ảnh tốt hơn rất nhiều.



  • @tresdin đã nói trong Hỏi về resize hình trong nodejs:

    Mình vẫn chưa rõ về vấn đề kích thước ảnh. Kích thước bạn nhận được là bao nhiêu? Kích thước mong muốn là bao nhiêu?

    Còn về vấn đề chất lượng ảnh, hàm scale chú trọng vào performance nên chỉ mặc định sử dụng filter box nên chất lượng ảnh không cao. Nếu bạn quan tâm đến chất lượng ảnh, bạn nên sử dụng hàm resize thay cho scale vì hàm resize sử dụng filter lanczos, chạy chậm hơn nhưng cho chất lượng ảnh tốt hơn rất nhiều.

    resize xong cache lại, kết hợp với dùng optipng, jpegoptim, gifsicle thì chỉ chậm lần đầu, về sau sử dụng vẫn đảm bảo tốc độ cậu ạ


  • Global Moderator

    @nvs2394 đã nói trong Hỏi về resize hình trong nodejs:

    có hình được có hình không được đó bạn. mình mới test lại thì nó ra thế này
    Hình gốc : 0_1464937331068_hgo3.jpg
    hình resize
    0_1464937357640_img_240_240_thumbnail_E1mu8Na18os9R1qxG1Rd.jpg

    lạ nhỉ, mình vẫn resize bình thường mà, demo này
    tapchiviet dot info



  • bạn resize bằng cái code ở trên bạn paste cho mình phải ko. sao bên mình không dc ta


  • Global Moderator

    @nvs2394 đã nói trong Hỏi về resize hình trong nodejs:

    bạn resize bằng cái code ở trên bạn paste cho mình phải ko. sao bên mình không dc ta

    đúng rồi bạn, đoạn đó là mình crop rồi pipe luôn ra cùng response nên code nó như này

    var cropGravity = 'Center';
    var imgGm2 = gm(readstream, filename).resize(new_width, new_height, '^').gravity(cropGravity).crop(new_width, new_height);
    imgGm2.stream().pipe(res);



  • cái new_width và new_height mà bạn truyền vào là số hay là phải xử lí gì nữa không bạn.



  • @nvs2394 đã nói trong Hỏi về resize hình trong nodejs:

    cái new_width và new_height mà bạn truyền vào là số hay là phải xử lí gì nữa không bạn.

    nó là số thôi bạn, mình đặt biến để lấy size theo url ấy mà



  • có lẽ là do cái lấy size (width, height) của mình thì truyền vào (500,200)
    đó. chứ code mình thấy giống nhau


  • Global Moderator

    @nvs2394 đã nói trong Hỏi về resize hình trong nodejs:

    có lẽ là do cái lấy size (width, height) của mình thì truyền vào (500,200)
    đó. chứ code mình thấy giống nhau

    bạn thử hardcode xem sao


Log in to reply