自己做了一个社群最火AI"黏土效果"图片处理器

839 阅读7分钟

大师课:前端,我眼看它出现、它成长、它成熟,却远远不是结束。因此,我想说给你听,让你对我们身处的行业,有个大框架式的认知,知道:它是怎么来的,从而去判断,它要往哪里去。

欢迎关注我的公众号 “技术园游会” ,获得可运行的代码包。持续更新,交流大厂经验。

问前端 13年大厂前端资深大佬在线回答问题,我不唬人,是真心为你们服务,想传帮带,把大厂的经验和思维方式通过这种方式告诉你们

1对1量身制定个人发展方案,提供业界专业建议,和面试指导。已帮助服务过上百名毕业生;

  • 适合人群:应届毕业生找方向、前端小白打怪晋升、职业困惑、职场瓶颈
  • 话题:客户端、h5、b端、低代码、可视化、性能调优、监控告警、国际化、研发效率、职场沟通、向上管理、团队管理等;
  • 方式:语音;
  • 沟通步骤(你将获得的服务):
  • 现状背景描述
  • 困惑和诉求沟通
  • 解决方案探讨和指导
  • 方向指引、技巧传授、抉择建议等开放性建议
  • 系统性总结和根据个人特点、诉求得出的发展建议

引言

这段时间,黏土AI图片处理服务真的是太火了,效果也是相当的可爱淳朴。这次,我又来探索这个应用领域了~世界那么大,走走也挺好。我将手把手教你如何从零开始创建一个有趣的小应用——用户上传照片后,服务器自动为其添加独特的“黏土艺术”效果并即时展示。详细介绍前后端交互流程、核心代码实现及简易部署步骤,一起领略Web开发的魅力。

技术无边界,只要好用,只要能用,都建议大家进行尝试了解,为自己的未来增加可能性。

前端亮点深入剖析

功能设计:

  • 直观上传界面:用户通过简洁的UI选择本地图片上传。
  • 实时预览:上传后,原图立即预览,提升用户体验。
  • 一键处理:点击按钮,异步发送请求至后端,等待“黏土化”效果呈现。

实施步骤:

1. 图片上传: 用户通过<input type="file">元素选择一张图片,当文件被选中时,FileReader API用于读取文件并将图片显示在页面上。 2. 处理请求:用户点击“Apply Clay Effect”按钮后,通过JavaScript的fetch API向后端服务器发送一个POST请求,请求中包含用户上传图片的Base64编码数据。 3. 结果显示:后端处理完成后,前端接收处理过的图片数据,并将其显示在页面上的另一个<img>标签中,展示“黏土效果”。

前端(简化版HTML+JS)

<!-- index.html 片段 -->
<input type="file" id="imageUpload">
<button id="applyEffect">应用黏土效果</button>
<img id="preview" src="">
<img id="result" src="" style="display:none;">
<script>
document.getElementById('applyEffect').addEventListener('click'async () => {
    const file = document.getElementById('imageUpload').files[0];
    if (file) {
        const reader = new FileReader();
        reader.onload = function(e) {
            const imgData = e.target.result;
            // 发送图片数据到后端处理
            fetch('/process_image', {
                method'POST',
                bodyJSON.stringify({image: imgData}),
                headers: {'Content-Type''application/json'}
            })
            .then(response => response.blob())
            .then(blob => {
                const url = URL.createObjectURL(blob);
                document.getElementById('result').src = url;
                document.getElementById('result').style.display = 'block';
            });
        };
        reader.readAsDataURL(file);
    }
});
</script>

后端魔法揭秘

后端作为系统的驱动核心,负责接收前端请求、处理数据并返回结果,是实现“黏土效果”的关键。

功能设计

  • 高效接收:Flask框架快速响应前端请求,处理图片数据。
  • 图像处理:利用Pillow库,实施边缘增强与模糊处理,模拟黏土质感。
  • 即时反馈:处理后的图片数据迅速回传,无缝集成至前端展示。

实施步骤

1. 接收请求:Flask应用监听/process_image路径,准备接收前端发来的图片数据。 2. 图片处理:后端接收到图片后,使用Pillow库打开图片,应用边缘检测滤镜和模糊滤镜模拟“黏土效果”。此示例中省略了HSV色彩空间调整,实际应用中可添加相应代码调整饱和度等。 3. 返回处理结果:处理完的图片被转换成二进制数据,通过HTTP响应返回给前端,前端再将其展示出来。

后端代码示例(Python Flask)

from flask import Flask, request, jsonify
from PIL import Image, ImageFilter
import io

app = Flask(__name__)

@app.route('/process_image', methods=['POST'])
def process_image():
    try:
        # 获取前端传来的Base64图片数据并解码为图像
        image_data = request.json['image']
        image_data = image_data.split(',')[1]
        decoded_image = Image.open(io.BytesIO(base64.b64decode(image_data)))
        
        # 应用黏土效果处理逻辑(此处仅为示意)
        filtered_image = apply_clay_effect(decoded_image)
        
        # 转换为BytesIO以便发送
        img_byte_arr = io.BytesIO()
        filtered_image.save(img_byte_arr, format='JPEG')
        img_byte_arr = img_byte_arr.getvalue()
        
        return jsonify({'success'True'image': base64.b64encode(img_byte_arr).decode()})
    except Exception as e:
        return jsonify({'success'False'error'str(e)})

def apply_clay_effect(image):
    # 实现边缘检测和模糊效果的函数
    # ...(具体实现细节)
    return processed_image

if __name__ == '__main__':
    app.run(debug=True)

黏土核心逻辑

示例

from PIL import Image, ImageFilter, ImageEnhance

def apply_clay_effect(image):
    """
    应用“黏土效果”处理逻辑到图片上。
    
    步骤简述:
    1. 应用边缘检测滤镜强化轮廓。
    2. 调整图像饱和度,增加色彩鲜明度。
    3. 使用模糊滤镜模拟材质质感。
    
    参数:
    image (PIL.Image): 原始图像对象。
    
    返回:
    PIL.Image: 处理后的图像对象。
    """
    # 1. 边缘检测,增强轮廓
    edge_image = image.filter(ImageFilter.FIND_EDGES)
    
    # 2. 由于Pillow不直接支持HSV调整,我们可以通过增强饱和度间接达到类似效果
    enhancer = ImageEnhance.Color(image)
    image_with_enhanced_saturation = enhancer.enhance(1.5)  # 增强饱和度
    
    # 3. 使用模糊滤镜模拟材质质感,这里使用高斯模糊作为示例
    blurred_image = image_with_enhanced_saturation.filter(ImageFilter.GaussianBlur(radius=2))
    
    # 将边缘检测的结果与模糊后的图像合成,模拟黏土质感
    # 注意:这里的合成方式较为简单,实际效果可能需要更复杂的叠加逻辑
    # 例如,可以通过调整透明度或者使用特定混合模式来达到更好的效果
    final_image = Image.blend(blurred_image, edge_image, alpha=0.2)  # alpha值调整边缘强度
    
    return final_image

# 假设你已经有了一个Image对象,比如通过如下方式获取
# from PIL import Image
# original_image = Image.open("path_to_your_image.jpg")

# 应用处理逻辑
# clay_effect_image = apply_clay_effect(original_image)
# clay_effect_image.show()  # 显示处理后的图像

部署步骤

准备环境:

1. 安装Python: 确保你的系统已安装Python 3.x版本。 2. 安装依赖: 打开终端或命令提示符,进入项目目录,执行以下命令安装Flask和Pillow库。

bash pip install flask pillow

运行Flask应用:

1. 修改配置(可选): 在生产环境中,需要配置Flask为生产模式,并配置日志、数据库连接等。但在这个简单示例中,直接运行即可。 2. 启动服务: 在项目目录下,运行app.py

bash python app.py

运行端口:5000

静态文件托管与前端代码部署:

1. 静态文件:在Flask中,可以通过指定静态文件夹来托管前端资源。默认情况下,Flask查找名为static的文件夹。可以将index.html和其他前端资源(CSS、JS等)放入此文件夹。

访问应用:

  • • 打开浏览器,输入http://localhost:5000/访问你的应用。

结语

这次,走出了前端,窥探了python的魔力,这份“黏土效果”图片处理器,简单实用。如果需要完整代码包:欢迎关注我的公众号 “技术园游会” ,获得可运行的代码包。

前端大师课