如何集成或转换Python脚本以用于Chrome扩展

2024-09-28 21:31:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个chrome扩展,它生成一个meme,给定一个选定的文本。预期的功能是选择一些文本字符串,打开上下文菜单,然后单击“生成Meme”按钮,该按钮将下载生成的Meme或提供指向图像的链接。你知道吗

我的困境是,我使用Python的图像库(PIL)创建了meme生成器脚本,但是,我不知道如何将该脚本实现到Chrome扩展(Javascript)中。你知道吗

下面是Python脚本:

import PIL
from convert import convert
from PIL import ImageFont
from PIL import Image
from PIL import ImageDraw

topString = input("Enter Top Message: ")
bottomString = input("Enter Top Message: ")
topString = convert(topString)
bottomString = convert(bottomString)
print(topString + " " + bottomString)

img = Image.open("base.jpg")
font = ImageFont.truetype("Krabby Patty.ttf", fontSize)
imageSize = img.size
fontSize = int(imageSize[1] / 5)

topTextSize = font.getsize(topString)
bottomTextSize = font.getsize(bottomString)

while topTextSize[0] > imageSize[0] - 20 or bottomTextSize[0] > imageSize[0] - 20:
    fontSize = fontSize - 1
    font = ImageFont.truetype("Krabby Patty.ttf", fontSize)
    topTextSize = font.getsize(topString)
    bottomTextSize = font.getsize(bottomString)

topTextPosition = ((imageSize[0] / 2) - (topTextSize[0] / 2), 0)
bottomTextPosition = ((imageSize[0] / 2) - (bottomTextSize[0] / 2), imageSize[1] - bottomTextSize[1])
draw = ImageDraw.Draw(img)

#Outline text
outlineRange = int(fontSize / 15)
for x in range(-outlineRange, outlineRange + 1):
    for y in range(-outlineRange, outlineRange + 1):
        draw.text(
            (topTextPosition[0] + x, topTextPosition[1] + y), topString, (0, 0, 0), font=font)
        draw.text(
            (bottomTextPosition[0] + x, bottomTextPosition[1] + y), bottomString, (0, 0, 0), font=font)

draw.text(topTextPosition, topString, (255, 255, 255), font=font)
draw.text(bottomTextPosition, bottomString, (255, 255, 255), font=font)

img.save("meme.png")

下面是chrome扩展的Javascript:

var genMSM = function(info) {
    message = convert(info.selectionText)

}
chrome.contextMenus.create({
    title: "Generate Meme",
    contexts: ["selection"],
    onclick: genMSM
});

function convert(message) {
    output = ""
    for(var i = 0; i < message.length; i++){
        output += i % 2 == 0 ? message.charAt(i).toLowerCase():message.charAt(i).toUpperCase();
    }
    return output
}

任何帮助或建议如何实施这将不胜感激!你知道吗


Tags: textfromimportmessageconvertimgpilfont