async def tex(self, evt: MessageEvent, formula: str) -> None: fig = plot.figure(figsize=(0.01, 0.01)) text = fig.text(0, 0, rf"${formula}$", fontsize=self.config["font_size"], usetex=self.config["use_tex"]) info = ImageInfo(thumbnail_info=ThumbnailInfo()) output = BytesIO() if self.config["mode"] == "svg": fig.savefig(output, format="svg", bbox_inches="tight") data = output.getvalue() file_name = "tex.svg" info.mimetype = "image/svg+xml" info.size = len(data) bb = text.get_window_extent(fig.canvas.get_renderer()) info.width, info.height = int(bb.width), int(bb.height) uri = await self.client.upload_media(data, info.mimetype, file_name) else: fig.savefig(output, dpi=300, format="png", bbox_inches="tight") data = output.getvalue() file_name = "tex.png" info.mimetype = "image/png" info.size = len(data) output.seek(0) img = Image.open(output) info.width, info.height = img.size uri = await self.client.upload_media(data, info.mimetype, file_name) output.seek(0) output.truncate(0) fig.savefig(output, dpi=self.config["thumbnail_dpi"], format="png", bbox_inches="tight") data = output.getvalue() info.thumbnail_url = await self.client.upload_media(data, "image/png", "tex.thumb.png") info.thumbnail_info.size = len(data) plot.close(fig) output.seek(0) img = Image.open(output) info.thumbnail_info.width, info.thumbnail_info.height = img.size img.close() output.close() await self.client.send_image(evt.room_id, uri, info=info, file_name=file_name)
async def _reupload(self, url: URL, title: Optional[str] = None, dimensions: Optional[Tuple[int, int]] = None, external_url: Optional[str] = None, thumbnail_url: Optional[URL] = None, thumbnail_dimensions: Optional[Tuple[int, int]] = None, headers: Optional[Dict[str, str]] = None) -> Image: info = ImageInfo() if "user_agent" in self.config: headers["User-Agent"] = self.config["user_agent"] async with self.bot.http.get(url, headers=headers) as resp: data = await resp.read() info.size = len(data) info.mimetype = resp.headers["Content-Type"] if not info.mimetype: info.mimetype = magic.from_buffer(data, mime=True) if not title: title = self._get_filename(url, resp, info.mimetype) if dimensions: info.width, info.height = dimensions elif Pillow: img = Pillow.open(BytesIO(data)) info.width, info.height = img.size mxc = await self.bot.client.upload_media(data, info.mimetype) if thumbnail_url: thumbnail = await self._reupload(thumbnail_url, title=title, headers=headers, dimensions=thumbnail_dimensions) info.thumbnail_url = thumbnail.url info.thumbnail_info = thumbnail.info return Image(url=mxc, info=info, title=title, external_url=external_url)