diff --git a/README.md b/README.md index 8a962e2..608ac79 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,7 @@ - 添加了自动计算长宽的功能 a. 长和宽均为-1,则直接从原图取得长宽数值 b. 长、宽二者之一为-1,则从给定数值的边长计算出缩放倍率并等比缩放 +- 通过在四周增加2像素padding解决顶格的动态指针边缘出现黑线的问题 注: - `ani2cape.py`不接受参数,直接运行即读取同目录下`config.py`内容,其中`Cursors`子项目`Path`属性使用相对路径时基于当前切换到的目录(而不是程序目录) diff --git a/ani2cape.py b/ani2cape.py index 27527d5..9e81c24 100644 --- a/ani2cape.py +++ b/ani2cape.py @@ -85,8 +85,8 @@ def main(): cursorSetting = { 'FrameCount': 1, 'FrameDuration': cursorConfig['FrameDuration'], - 'HotSpotX': cursorConfig['HotSpot'][0], - 'HotSpotY': cursorConfig['HotSpot'][1], + 'HotSpotX': cursorConfig['HotSpot'][0] + 2.0, + 'HotSpotY': cursorConfig['HotSpot'][1] + 2.0, 'Representations': [] } hidpiRatio = 2 if capeConfig['HiDPI'] else 1 @@ -100,15 +100,17 @@ def main(): for frameIndex in range(len(res['msg'])): b = io.BytesIO(res['msg'][frameIndex]) frame, (width, height) = readCUR(b, width, height) - position = (0, int(width * frameIndex)) + position = (2, 2 + int((height + 4) * frameIndex)) if frameIndex == 0: - spriteSheet = Image.new('RGBA', (int(width), int(height) * len(res['msg']))) + spriteSheet = Image.new('RGBA', (int(width + 4), int(height + 4) * len(res['msg']))) spriteSheet.paste(frame, position) else: logging.info('尝试作为CUR读入') - spriteSheet, (width, height) = readCUR(f, width, height) + frame, (width, height) = readCUR(f, width, height) + spriteSheet = Image.new('RGBA', (int(width + 4), int(height + 4))) + spriteSheet.paste(frame, (2, 2)) logging.info(f'目标尺寸:{width}x{height}@{hidpiRatio}x') - cursorSetting['PointsHigh'], cursorSetting['PointsWide'] = width, height + cursorSetting['PointsHigh'], cursorSetting['PointsWide'] = width + 4, height + 4 for scale in (1, 2) if capeConfig['HiDPI'] else (1,): byteBuffer = io.BytesIO() scaleImage(spriteSheet, scale).save(byteBuffer, format='tiff', compression='tiff_lzw') diff --git a/config.py b/config.py index 14a5eea..3412cd0 100644 --- a/config.py +++ b/config.py @@ -6,13 +6,13 @@ capeConfig = { 'Cursors': { 'com.apple.coregraphics.Arrow': { 'FrameDuration': 0.1, - 'HotSpot': (0.0, 0.0), - 'Size': (32.0, -1.0), + 'HotSpot': (2.0, 2.0), + 'Size': (32.0, 32.0), 'Path': "./Normal.ani" }, 'com.apple.coregraphics.Move': { 'FrameDuration': 0.1, - 'HotSpot': (0.0, 0.0), + 'HotSpot': (2.0, 2.0), 'Size': (32.0, 32.0), 'Path': "./Normal.ani" }, @@ -36,7 +36,7 @@ capeConfig = { }, 'com.apple.cursor.40': { 'FrameDuration': 0.1, - 'HotSpot': (0.0, 0.0), + 'HotSpot': (2.0, 2.0), 'Size': (32.0, 32.0), 'Path': "./Help.ani" }, @@ -54,13 +54,13 @@ capeConfig = { }, 'com.apple.cursor.2': { 'FrameDuration': 0.1, - 'HotSpot': (0.0, 0.0), + 'HotSpot': (2.0, 2.0), 'Size': (32.0, 32.0), 'Path': "./Link.ani" }, 'com.apple.cursor.13': { 'FrameDuration': 0.1, - 'HotSpot': (0.0, 0.0), + 'HotSpot': (2.0, 2.0), 'Size': (32.0, 32.0), 'Path': "./Link.ani" },