Я написал этот скрипт для вас:
$img = Get-Clipboard -Format Image
If (-not $img) {Throw 'No image on the clipboard'}
$ms = New-Object System.IO.MemoryStream
$img.Save($ms, [System.Drawing.Imaging.ImageFormat]::Png)
$ms.Position = 0
Add-Type -AssemblyName System.Net.Http
$httpClientHandler = New-Object System.Net.Http.HttpClientHandler
$httpClient = New-Object System.Net.Http.HttpClient $httpClientHandler
$contentDispositionHeaderValue = New-Object System.Net.Http.Headers.ContentDispositionHeaderValue "form-data"
$contentDispositionHeaderValue.Name = "file"
$contentDispositionHeaderValue.FileName = 'image.png'
$streamContent = New-Object System.Net.Http.StreamContent $ms
$streamContent.Headers.ContentDisposition = $contentDispositionHeaderValue
$streamContent.Headers.ContentType = New-Object System.Net.Http.Headers.MediaTypeHeaderValue 'image/png'
$content = New-Object System.Net.Http.MultipartFormDataContent
$content.Add($streamContent)
$response = $httpClient.PostAsync('https://stackoverflow.com/upload/image?https=true', $content).Result
$response.Content.ReadAsStringAsync().Result -match '"(.*)"' | Out-Null
"![]($($matches[1]))"
Сначала он преобразует изображение из буфера обмена в формат PNG. Затем используются некоторые классы веб-утилит .NET для правильной настройки структуры multipart/form-data
- этот раздел адаптирован из сообщения в блоге Марио Майчицы. Как только это все решено, это делает запрос POST. Наконец, он использует регулярное выражение для анализа небольшого итогового HTML-документа, чтобы извлечь URL вновь загруженного изображения, которое он выводит на консоль. Если вы хотите скопировать фрагмент Markdown непосредственно в буфер обмена, нажмите на | scb
до последней строки.
Чтобы запустить скрипт, сохраните его как файл .ps1
, например, seimage.ps1
. Если вы этого еще не сделали, следуйте инструкциям в разделе «Включение сценариев» вики-тега PowerShell . Затем вы можете открыть приглашение PowerShell в содержащей папке и выполнить его:
.\seimage.ps1