MVC .NetCore使用IMAGESHARP上传图像并在数组

时间:2018-02-12 13:58:11

标签: asp.net-mvc asp.net-core colors

我有一个上传脚本,可以将图像上传并保存到文件夹中。

问题: 我想为图像添加不同的颜色方案,并以数组或图像的形式显示给用户。

这是我的脚本

using (Image<Rgba32> image = SixLabors.ImageSharp.Image.Load(Path.Combine(path, pic.FileName)))
{  
    image.Mutate(ctx => ctx
         .Resize(image.Width / 2, image.Height / 2)
         .Polaroid()); //Add colour format

    image.Save(fileName);// .Save to disk    
}
上面的

.Polaroid()是一种颜色格式,其他人比较丰富,例如.GrayScale().Glow().OilPaint等(我想为用户提供最多10个选项)

因此我的问题是

  1. 如何逐个遍历每个,然后将它们分配给变量?

  2. 或者将它们保存到磁盘然后检索并显示给用户会更好吗? (考虑到选项2可能是资源密集型的)

  3. 谢谢

    这是一个很有用的代码

    using (Image<Rgba32> image = SixLabors.ImageSharp.Image.Load(Path.Combine(path, pic.FileName)))
    {
        for (int i = 0; i <= 2; i++)
        {
            image.Mutate(
                ctx => ctx
                .Resize(image.Width / 2, image.Height / 2)
                .Polaroid());
    
            image.Save(fileName);// .
    
    
            // repeat the above 10  times removing the resize option e.g. 
            // Adding a change of filename value, so you get the value 10 times. 
            // Which I feel might be resourse intensive if heavily hit by web users
    
            fileName = Path.Combine(he.WebRootPath + "/uploads/" + "/" + user, Path.GetFileName("2" + pic.FileName));
    
            image.Mutate(
                ctx => ctx
                .OilPaint()); // GIVES YOU OIL PAINT FORMAT
    
            image.Save(fileName); // .
            fileName = Path.Combine(he.WebRootPath + "/uploads/" + "/" + user, Path.GetFileName("3" + pic.FileName));
    
            image.Mutate(
                ctx => ctx
                .Grayscale()); // GIVES YOU gray scale formattinng
    
            image.Save(fileName); // .
        }
    }
    

1 个答案:

答案 0 :(得分:0)

你的问题有点奇怪。虽然ImageSharp是您的目标,但您实际上是在询问有关向最终用户提供图像的最佳做法的几个问题。

回答ImageSharp特定部分。 Clone()是你的朋友。

using (var image = Image.Load(Path.Combine(path, pic.FileName)))
{  
    // First resize the image. No point repeating it for each clone. 
    image.Mutate(x => x.Resize(image.Width / 2, image.Height / 2));

    // Now clone the image and apply the effect.
    // If you are offering options perhaps a switch statement would be a good idea.
    using (var clone = image.Clone(x => x.Polaroid())))
    {  
        clone.Save(fileName); // .Save to disk
    }

    // Let's clone it again. The original image is untouched.
    using (var clone2 = image.Clone(x => x.OilPaint())))
    {  
        clone2.Save(fileName2); // .Save to disk
    }    
}

我总是建议保存到磁盘并让静态文件处理程序为图像提供服务。您也应该实现某种缓存机制。