夸克逃逸 发表于 2022-11-26 18:41

好看的LOGO要收费?一个插件就搞定!

本帖最后由 夸克逃逸 于 2023-8-26 09:48 编辑

——————————————————
好看的LOGO要收费?一个插件就搞定!
——————————————————

插件现在支持导出海报了!内容运营者福利!新帖移步:https://www.52pojie.cn/thread-1722970-1-1.html



强烈建议给项目一个star或者fork,以后会根据反馈持续更新~


项目地址是https://github.com/quarkape/free-canvas


提示:LOGO或海报很多图片、字体或者素材都有版权,帖子和插件仅供技术交流,插件下载的LOGO和海报在官方未授权时请勿商用,由未授权而商用导致的版权纠纷问题,由LOGO和海报使用者承担所有责任。

某网站可以在线生成LOGO,并支持编辑,效果还不错,但是保存和下载需要注册、登录和收费。
如果希望获取LOGO,并且确保自己不会用于商用的话,这个帖子也许能帮到你!

一、核心思路
其实在线编辑的LOGO都是用SVG实现的。而我们可以直接把SVG的内容取出来,生成一个SVG文件,就足够在PPT和WEB中使用了。因此我们需要分析网站结构。

1. 首先进入该网站的LOGO编辑页面,打开开发者工具,定位LOGO的代码,发现并不是SVG代码,而是DIV标签:

这说明网站在LOGO上面放了一层DIV,防止用户直接定位到LOGO代码区。我们将这行代码删除,重新定位,就能找到SVG代码了。




2. 然后我们需要分析SVG里面有些什么内容:

简单分析不难看出,有一个LOGO背景,还有一个水印。LOGO背景一般来说并不需要,因为我们常见的LOGO都是PNG格式的。但是这个网站有的LOGO是带有背景色的,LOGO依赖于背景色,因此这个背景色的部分我们不着急删除,不过这个水印肯定得删除。




3. 我们需要一定的方法找到这个SVG元素。经过实验,可以采用以下这种方法:
```JavaScript
const svg_part = document.getElementsByClassName("card__upper").parentNode.childNodes.children;
```
也就是说先找到card__upper这个节点,然后通过父节点去找他的兄弟节点,他的兄弟节点里面的第二个子节点就是我们要找的SVG代码了。




4. 我们需要对SVG代码进行处理:
第一个处理是删除水印,第二个处理是根据用户实际需求删除背景,第三个处理是根据用户实际需求重新设置SVG尺寸。总之代码如下:
```JavaScript

chrome.runtime.onMessage.addListener((req, sender, resp) => {
console.log('processing...')
// 判断用户输入
let widthset = req.widthset === '' ? 680 : parseInt(req.widthset);
let keepbg = req.keepbg;
if (widthset < 34 || widthset > 6800) {
    resp('请确保值介于34~6800');
    return;
}
// 寻找svg节点
const svg_part = document.getElementsByClassName("card__upper").parentNode.childNodes.children;
// 复制节点,防止对原节点造成破坏
const svg_part_copy = svg_part.cloneNode(true);
// 重新设置节点尺寸
svg_part_copy.setAttribute("width", widthset);
svg_part_copy.setAttribute("height", parseInt(widthset * 25 / 34));
// 删除水印、根据用户需求决定是否需要删除背景
const bg = svg_part_copy.children;
const wm = svg_part_copy.children;
if (bg.nodeName === 'rect' || bg.className === 'background') {
    if (!keepbg) {
      svg_part_copy.removeChild(bg);
    }
}
if (wm.nodeName === 'rect' || wm.classname === 'watermarklayer') {
    svg_part_copy.removeChild(wm);
}
dl(svg_part_copy.outerHTML);
console.log('succeed!')
resp('操作成功')
})
```
上述代码第一行是与浏览器插件的开发相关的,dl()是一个生成SVG文件的函数。




5. 需要设置用户点击插件的一个弹窗页面:
这个页面允许用户选择是否需要保留LOGO背景,是否需要重新设置LOGO尺寸两个设置。
```HTML
<!DOCTYPE html>
<html>
      <head>
                <title>popup</title>
                <meta charset="utf-8" />
                <link href="css/popup.css" rel="stylesheet" type="text/css">
      </head>
      <body>
                <input id="guidence" value="使用教程[必看!!]" type="button" />
                <span>(可选)LOGO宽度(34~6800):</span><br/>
                <input id="widthset" type="number" maxlength="5" placeholder="建议设置为34的倍数,默认680" />
               
                <div id="keepbgdiv">
                        <input type="checkbox" id="keepbg" name="keepbg"><span>保留LOGO背景(默认不保留且透明)</span><br/>
                </div>
                <input id="execute" value="开始处理" type="button" />
                <div id="ans" style="margin-top:24px;color:red"></div>
      </body>
      <script src="js/popup.js" type="text/javascript"></script>
</html>
```
其实就是一个输入框用于接收用户定义的LOGO宽度,一个输入框用于接收用户是否选择保留背景。




6. 这个弹窗需要将用户的设置传递给content.js,因此需要再用到一个popup.js:
```JavaScript
document.getElementById("execute").addEventListener("click", () => {
chrome.tabs.query({active: true, currentWindow: true}, (tabs) => {
    if (tabs.url !== 'https://www.logosc.cn/edit') {
      document.getElementById("ans").innerText = "当前页面并不适合使用该插件,请点击上方使用教程查看本插件适用网站与页面";
      return;
    }
    let opt = {
      'widthset': document.getElementById("widthset").value,
      'keepbg': document.getElementById('keepbg').checked
    }
    chrome.tabs.sendMessage(tabs.id, opt, (resp) => {
      document.getElementById("ans").innerText = resp;
    })
})

})
```
上述代码主要的作用是监听用户点击开始处理的事件,同时读取用户的设置内容,并将参数传递到content.js当中。同时对当前页面进行判断,如果不是LOGO设计网站的编辑页面,就给出提示。




7. 浏览器插件开发的相关配置,需要mainfest.json文件:
```Json
{
      "manifest_version": 3,
      "name": "Logo Thief",
      "version": "1.0",
      "description": "快速获取LOGO部分的SVG内容。插件更新地址:https://github.com/quarkape/logo_thief.git",
      "author": "quarkape",
      "action": {
                "default_title": "LOGO_THIEF",
                "default_popup": "popup.html"
      },
      "icons": {
                "16": "img/logo_thief.png",
                "48": "img/logo_thief.png",
                "128": "img/logo_thief.png"
      },
      "permissions": ["tabs"],
      "homepage_url": "https://github.com/quarkape/logo_thief.git",
      "content_scripts": [
                {
                        "matches": ["https://www.logosc.cn/edit"],
                        "js": ["js/content.js"]
                }
      ]
}
```
最近一年该文件的版本升级到了V3,需要的小伙伴可以前往官网查看教程:https://developer.chrome.com/docs/extensions/mv3/manifest/


二、插件预览

-----



三、使用说明(详见项目地址下方说明)
1. LOGO的大小没必要越大越好,个人认为:(1)如果用作网页favicon图标,用34就够了;(2)如果用作一般的网页或者作品的LOGO,用340就行了;(3)如果要用作打印,A4纸大小,340~4000就行了;(4)如果要打印大的海报,且LOGO占很大面积,可以试试最大6800

2. 经过测试,更大的宽度,比如34000,在用IE转换为.png格式的时候会报错“意外的调用了属性或方法”,因此将最大宽度限定于6800。不过应该也够用了。如果有特殊需求的,例如只需要svg文件并且希望更大宽度的,可以单独提issue。当然你也可以自行修改最大宽度,只需要:(1)找到js/content.js文件并打开;(2)将第7行的6800修改为你想要的最大值就可以了,最大能多大我不清楚,不过我试过34000,可以导出svg,但是用Edge转PNG的时候会失败;(3)注意修改之后需要在扩展程序管理页面刷新这个插件;或者把这个插件移除了,再重新添加进来。

3. 编辑好的logo一般会居于整个图片中间,可以自行使用PS等工具裁剪。


四、安装使用
1. 首先去下载该项目:项目地址是https://github.com/quarkape/free-canvas。进入项目页面后,点击页面中Code按钮,然后点击最后一项”Download ZIP“即可下载压缩包。在项目下方也有安装使用的详细介绍和配置说明。
2. 将项目解压。
3. 打开浏览器的扩展程序管理页面,开启开发者模式,然后加载解压的扩展程序,选择刚解压得到的文件夹即可。
4. 使用的时候,先进入目标网站(网站链接详见项目地址下方说明),然后根据网站指引进入LOGO编辑页面,编辑完成后点击插件,做好配置,点击开始处理即可。
5. 得到的SVG文件可以直接用于PPT和WEB中,也可以用Edge打开,然后使用Edge的IE模式去加载页面,另存为图片并选择PNG格式。
6. 如果还不会使用的话,可以看看视频操作教程:https://www.bilibili.com/video/BV1t84y1r71B?share_source=copy_web


五、其他
1. 如果大家觉得好用的话,我可以再去看看创客贴的相关功能,看能不能做一个类似的插件(不过我刚看了一下,可能工作量有点儿大,也不一定能实现)。
2. 另外其实这个教程涉及浏览器插件开发的相关知识,我自己也并不擅长,所以教程可能稍微显得不太能理解。感兴趣的小伙伴建议可以把源码下载下来,再摸索摸索,欢迎帖子下留言交流~

具体实现过程我发过一个视频,感兴趣的小伙伴可以去看看:https://www.bilibili.com/video/BV1ZN411R7xm?share_source=copy_web

夸克逃逸 发表于 2022-11-26 21:46

C斯咚喃 发表于 2022-11-26 21:38
冒昧问一下可以打包发一下蓝奏等网盘吗?官网一直进不去,后面两个注册且下载慢

好的~
logo_thief
https://www.aliyundrive.com/s/T2EZ85gLxfo
提取码: 4w2a

夸克逃逸 发表于 2022-12-3 02:39

geniusrot 发表于 2022-12-3 01:35
下载的SVG,全是空白。。。。

你看看是不是logo主体是白色背景是黑色,你没勾选保留背景所以看不出来。或者是你的宽度设置的很大,打开的时候屏幕只显示的是左上角白色部分,你要滚动屏幕或者缩放网页才能看到?都不是的话麻烦你把svg文件发给我我看一下问题出在哪里~

mt50802 发表于 2022-11-26 18:55

这个不错,很实用

自编自导自演 发表于 2022-11-26 18:56

必备工具,感谢分享

nico199388 发表于 2022-11-26 19:03

做PPT经常要遇到做LOGO,有这个真方便了!

3241095258 发表于 2022-11-26 19:04

这个可以的

yjn866y 发表于 2022-11-26 19:06

收下了,会学习一下

18898589561 发表于 2022-11-26 19:09

感谢分享!必备工具

orxvan 发表于 2022-11-26 19:09

这个工具好,很不错还给了破解思路

RileyW 发表于 2022-11-26 19:14

这个可以的,点赞

高锰酸钾 发表于 2022-11-26 19:17

一定要谷歌浏览器吗?github打不开,好奇怪啊。
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 好看的LOGO要收费?一个插件就搞定!