价值200万的超椭圆LOGO生成小工具

[复制链接]

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 梦淡如非 于 2024-10-16 09:29 编辑

小米LOGO 原文地址 http://www.mi.com/a/h/19823.html
小米的新Logo由日本设计师原研哉设计,采用“超椭圆”形状,结合了圆形和方形的特点,旨在展现品牌的灵动与亲和力。颜色上变得更加柔和,强调了“Alive”(生动)的概念,体现了小米希望通过科技让生活更加美好的愿景。这个新标识是小米品牌升级的一部分,意在以更全面、强大的姿态面对未来。
最近要给博客换套个logo样式,这个logo是之前花了50块买的,其实还算可以,加上了一个简单的圆角样式,看起来其实也还行。但是圆角太直接,看着有点不太舒服。



于是我找到了之前小米的logo公式,

  1. |x|^n+|y|^n=1
复制代码

在网上找了一堆裁剪工具 例如 https://mi-logo.lvwzhen.com/
但是他的不能拿自己的图片进行裁剪 只有下方两种样式,不太符合我的要求。





于是,在AI工具的帮助下,写了一个可以裁剪自己图片为类小米logo的工具。




代码分享
  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>上传并裁剪成超椭圆图像</title>
  6. <style>
  7.     body {
  8.         font-family: 'Arial', 'Microsoft YaHei', sans-serif;
  9.         display: flex;
  10.         flex-direction: column;
  11.         align-items: center;
  12.         justify-content: center;
  13.         height: 100vh;
  14.         margin: 0;
  15.         background-color: #f0f2f5;
  16.     }
  17.     h2 {
  18.         color: #333;
  19.     }
  20.     input[type="file"], button {
  21.         margin-bottom: 20px;
  22.         padding: 10px 20px;
  23.         border: 1px solid #ccc;
  24.         border-radius: 5px;
  25.         background-color: #fff;
  26.         cursor: pointer;
  27.         transition: border-color 0.3s ease, background-color 0.3s ease, color 0.3s ease;
  28.     }
  29.     input[type="file"]:hover, button:hover {
  30.         border-color: #007bff;
  31.         background-color: #007bff;
  32.         color: #fff;
  33.     }
  34.     canvas {
  35.         border: 2px solid #007bff;
  36.         border-radius: 10px;
  37.         box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
  38.         margin-top: 20px;
  39.     }
  40.     .container {
  41.         max-width: 600px;
  42.         text-align: center;
  43.     }
  44. </style>
  45. </head>
  46. <body>

  47. <div class="container">
  48.     <h2>选择一张图片进行裁剪</h2>
  49.     <input type="file" id="imageLoader" name="imageLoader"/>
  50.     <button id="downloadButton">下载图像</button>
  51.     <canvas id="superEllipseCanvas" width="400" height="400"></canvas>
  52. </div>

  53. <script>
  54. function superEllipse(angle, n) {
  55.     const rad = angle * Math.PI / 180; // 将角度转换为弧度
  56.     const x = Math.pow(Math.abs(Math.cos(rad)), 2 / n) * (Math.cos(rad) >= 0 ? 1 : -1);
  57.     const y = Math.pow(Math.abs(Math.sin(rad)), 2 / n) * (Math.sin(rad) >= 0 ? 1 : -1);
  58.     return [x, y];
  59. }

  60. document.getElementById('imageLoader').addEventListener('change', handleImage, false);

  61. function handleImage(e) {
  62.     const reader = new FileReader();
  63.     reader.onload = function(event) {
  64.         const img = new Image();
  65.         img.onload = function() {
  66.             const canvas = document.getElementById('superEllipseCanvas');
  67.             const ctx = canvas.getContext('2d');
  68.             const n = 3; // 超椭圆的 n 值

  69.             // 清除画布
  70.             ctx.clearRect(0, 0, canvas.width, canvas.height);

  71.             // 绘制超椭圆
  72.             ctx.beginPath();
  73.             for (let i = 0; i <= 360; i++) {
  74.                 const [x, y] = superEllipse(i, n);
  75.                 const cx = (x + 1) * canvas.width / 2;
  76.                 const cy = (1 - y) * canvas.height / 2;
  77.                 if (i === 0) {
  78.                     ctx.moveTo(cx, cy);
  79.                 } else {
  80.                     ctx.lineTo(cx, cy);
  81.                 }
  82.             }
  83.             ctx.closePath();
  84.             ctx.clip(); // 将绘制区域裁剪为超椭圆形状

  85.             // 缩放和定位图片以适应超椭圆
  86.             const scale = Math.min(canvas.width / img.width, canvas.height / img.height);
  87.             const x = (canvas.width - img.width * scale) / 2;
  88.             const y = (canvas.height - img.height * scale) / 2;
  89.             ctx.drawImage(img, x, y, img.width * scale, img.height * scale);
  90.         };
  91.         img.src = event.target.result;
  92.     };
  93.     reader.readAsDataURL(e.target.files[0]);
  94. }

  95. document.getElementById('downloadButton').addEventListener('click', function() {
  96.     const canvas = document.getElementById('superEllipseCanvas');
  97.     const link = document.createElement('a');
  98.     link.href = canvas.toDataURL('image/png');
  99.     link.download = 'super_ellipse_image.png';
  100.     link.click();
  101. });
  102. </script>

  103. </body>
  104. </html>
复制代码
全部回复0 显示全部楼层
暂无回复,精彩从你开始!

快速回帖

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于楼主

新芽初现
  • 主题

    3
  • 回答

    2
  • 积分

    15
虚位以待,此位置招租

商务推广

    网盘拉新-短剧推广 此位置招租 此位置招租 此位置招租 此位置招租 此位置招租 此位置招租 此位置招租 此位置招租 此位置招租