<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Windows10 在 UWP 應用中支援亞克力畫刷,可以在部件的底部繪製亞克力效果的背景圖。下面我們使用 QLabel 來模擬這個磨砂過程。
MSDN 檔案中介紹了亞克力材料的配方,包括:高斯模糊、亮度混合、色調混合和噪聲紋理。
我們先來實現高斯模糊的效果,使用 scipy 可以很輕鬆的實現這個過程:
# coding:utf-8 import numpy as np from PIL import Image from PyQt5.QtGui import QPixmap from scipy.ndimage.filters import gaussian_filter def gaussianBlur(imagePath: str, blurRadius=18, brightFactor=1, blurPicSize: tuple = None) -> np.ndarray: """ 對圖片進行高斯模糊處理 Parameters ---------- imagePath: str 圖片路徑 blurRadius: int 模糊半徑 brightFactor:float 亮度縮放因子 blurPicSize: tuple 高斯模糊前將圖片縮放到指定大小,可以加快模糊速度 Returns ------- image: `~np.ndarray` of shape `(w, h, c)` 高斯模糊後的影象 """ if not imagePath.startswith(':'): image = Image.open(imagePath) else: image = Image.fromqpixmap(QPixmap(imagePath)) if blurPicSize: # 調整圖片尺寸,減小計算量,還能增加額外的模糊 w, h = image.size ratio = min(blurPicSize[0] / w, blurPicSize[1] / h) w_, h_ = w * ratio, h * ratio if w_ < w: image = image.resize((int(w_), int(h_)), Image.ANTIALIAS) image = np.array(image) # 處理影象是灰度圖的情況 if len(image.shape) == 2: image = np.stack([image, image, image], axis=-1) # 對每一個顏色通道分別磨砂 for i in range(3): image[:, :, i] = gaussian_filter( image[:, :, i], blurRadius) * brightFactor return image
接下來在 QLabel
上面繪製出亮度混合、色調混合和噪聲紋理,一般色調混合使用的顏色是影象的主題色,可以用 colorthief
庫提取,這裡就不贅述了:
class AcrylicTextureLabel(QLabel): """ 亞克力紋理標籤 """ def __init__(self, tintColor: QColor, luminosityColor: QColor, noiseOpacity=0.03, parent=None): """ Parameters ---------- tintColor: QColor RGB 主色調 luminosityColor: QColor 亮度層顏色 noiseOpacity: float 噪聲層透明度 parent: 父級視窗 """ super().__init__(parent=parent) self.tintColor = QColor(tintColor) self.luminosityColor = QColor(luminosityColor) self.noiseOpacity = noiseOpacity self.noiseImage = QImage('resource/noise.png') self.setAttribute(Qt.WA_TranslucentBackground) def setTintColor(self, color: QColor): """ 設定主色調 """ self.tintColor = color self.update() def paintEvent(self, e): """ 繪製亞克力紋理 """ acrylicTexture = QImage(64, 64, QImage.Format_ARGB32_Premultiplied) # 繪製亮度層 acrylicTexture.fill(self.luminosityColor) # 繪製主色調 painter = QPainter(acrylicTexture) painter.fillRect(acrylicTexture.rect(), self.tintColor) # 繪製噪聲 painter.setOpacity(self.noiseOpacity) painter.drawImage(acrylicTexture.rect(), self.noiseImage) acrylicBrush = QBrush(acrylicTexture) painter = QPainter(self) painter.fillRect(self.rect(), acrylicBrush)
用到的噪聲影象如下圖所示:
最後在 QLabel
上疊加磨砂影象和亞克力紋理,可以通過 Image.toqpixmap()
將 Image
轉換為 QPixmap
:
class AcrylicLabel(QLabel): """ 亞克力標籤 """ def __init__(self, blurRadius: int, tintColor: QColor, luminosityColor=QColor(255, 255, 255, 0), maxBlurSize: tuple = None, parent=None): """ Parameters ---------- blurRadius: int 磨砂半徑 tintColor: QColor 主色調 luminosityColor: QColor 亮度層顏色 maxBlurSize: tuple 最大磨砂尺寸,越小磨砂速度越快 parent: 父級視窗 """ super().__init__(parent=parent) self.imagePath = '' self.blurPixmap = QPixmap() self.blurRadius = blurRadius self.maxBlurSize = maxBlurSize self.acrylicTextureLabel = AcrylicTextureLabel( tintColor, luminosityColor, parent=self) def setImage(self, imagePath: str): """ 設定圖片 """ if imagePath == self.imagePath: return self.imagePath = imagePath image = Image.fromarray(gaussianBlur( imagePath, self.blurRadius, 0.85, self.maxBlurSize)) self.blurPixmap = image.toqpixmap() # type:QPixmap self.setPixmap(self.blurPixmap) self.adjustSize() def setTintColor(self, color: QColor): """ 設定主色調 """ self.acrylicTextureLabel.setTintColor(color) def resizeEvent(self, e): super().resizeEvent(e) self.acrylicTextureLabel.resize(self.size()) self.setPixmap(self.blurPixmap.scaled( self.size(), Qt.KeepAspectRatioByExpanding, Qt.SmoothTransformation))
下面是測試用的埃羅芒阿老師:
程式碼如下:
# coding:utf-8 import sys from PyQt5.QtGui import QColor from PyQt5.QtWidgets import QApplication from acrylic import AcrylicLabel app = QApplication(sys.argv) w = AcrylicLabel(20, QColor(105, 114, 168, 102)) w.setImage('resource/ClariS_ヒトリゴト (アニメ盤).jpg') w.show() app.exec_()
結果如下:
到此這篇關於利用PyQt5中QLabel元件實現亞克力磨砂效果的文章就介紹到這了,更多相關PyQt5 QLabel磨砂效果內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45