J'ai un graphique dans le presse-papiers sous OS X.
Quel est le moyen le plus rapide de le transférer sur le disque en png ou en jpg ?
J'ai un graphique dans le presse-papiers sous OS X.
Quel est le moyen le plus rapide de le transférer sur le disque en png ou en jpg ?
Utilisation de Aperçu.app est un moyen, mais un peu encombrant. On peut aussi le faire en ligne de commande.
Parce que pbpaste
peut seulement pbpaste > filename
les extraits de texte, vous voulez utiliser pngpaste
à la place.
Installez-le avec Brew :
brew install pngpaste
et l'utiliser :
pngpaste <filename>
Je sais que la question originale demande d'enregistrer en PNG ou JPEG, mais...
J'utilise un script qui enregistre n'importe quel graphique dans le presse-papiers sur une nouvelle page d'un document PDF, reproduisant ainsi en quelque sorte l'ancienne application 'Scrapbook' sur MacOS classique.
Le moyen le plus rapide est de sauvegarder le script dans le dossier de l'utilisateur. /Library/Scripts
afin que je puisse l'exécuter à partir du menulet scripts de la barre de menu. (que vous pouvez activer dans l'AppleScript Script Editor.app
de la boîte de dialogue Préférences).
Les images peuvent être copiées et collées à d'autres fins ou exportées en tant qu'images.
#!/usr/bin/python
# getPDFclip v.1.3 : Get PDF from Clipboard image data.
# This script saves a PDF with a copy of any image data found on the Mac Clipboard.
# If Clipboard.pdf exists, the image is added as an extra page.
from AppKit import NSPasteboard, NSPasteboardTypePDF, NSPasteboardTypeTIFF, NSPasteboardTypePNG, NSTIFFPboardType, NSPICTPboardType, NSImage
from Foundation import NSURL
import Quartz as Quartz
import os, syslog
# Change this to whatever filepath you want:
outfile=os.path.expanduser("~/Desktop/Clipboard.pdf")
myFavoriteTypes = [NSPasteboardTypePDF, NSPasteboardTypeTIFF, NSPasteboardTypePNG, NSTIFFPboardType, NSPICTPboardType, 'com.adobe.encapsulated-postscript']
pb = NSPasteboard.generalPasteboard()
best_type = pb.availableTypeFromArray_(myFavoriteTypes)
if best_type:
clipData = pb.dataForType_(best_type)
if clipData:
image = NSImage.alloc().initWithPasteboard_(pb)
if image:
page = Quartz.PDFPage.alloc().initWithImage_(image)
if os.path.exists(outfile):
pdfURL = NSURL.fileURLWithPath_(outfile)
myFile = Quartz.PDFDocument.alloc().initWithURL_(pdfURL)
if myFile:
pagenum = myFile.pageCount()
myFile.insertPage_atIndex_(page, pagenum)
print ("Image added to Clipboard file.")
else:
pageData = page.dataRepresentation()
myFile = Quartz.PDFDocument.alloc().initWithData_(pageData)
myFile.writeToFile_(outfile)
print ("Clipboard file created.")
else:
print ("No clipboard image data was retrieved.")
print ("These types were available:")
print (pb.types())
N'ayant pas réussi à faire fonctionner l'approche zsh de @HappyFace, j'ai créé une version bash traditionnelle :
#!/bin/bash
# see https://apple.stackexchange.com/a/428168
#
# you might want to save this script to
# $HOME/bin/jpgpaste and do a
# ln -s jpgpaste cpngpaste and
# chmod +x jpgpaste cpngpaste
# paste the clibpoard to a png file
function pngpaste() {
local name="$1.png"
local folder=$(pwd)
osascript -e "tell application \"System Events\" to ¬
write (the clipboard as «class PNGf») to ¬
(make new file at folder \"$folder\" with properties ¬
{name:\"${name}\"})"
}
# paste the clipboard to a jpg file
function jpgpaste() {
local name="$1.jpg"
local folder=$(pwd)
osascript -e "tell application \"System Events\" to ¬
write (the clipboard as JPEG picture) to ¬
(make new file at folder \"$folder\" with properties ¬
{name:\"${name}\"})"
}
script=$(basename $0)
case $script in
jpgpaste)
jpgpaste "$1"
;;
cpngpaste)
pngpaste "$1"
;;
esac
~Si vous utilisez déjà Alfred ou un gestionnaire de presse-papiers ~
J'utilise le gestionnaire d'historique de presse-papiers Alfreds (vous pouvez utiliser n'importe quel gestionnaire de presse-papiers gratuit pour faire cela aussi, à condition qu'il garde aussi un historique des images et pas seulement du texte).
Alfred enregistre toutes les captures d'écran de mes images dans le presse-papiers et les sauvegarde dans son historique de snippets.
Je crée ensuite une action de dossier (en utilisant Automator) pour copier tout ce qui est sauvegardé dans le dossier Historique du presse-papiers d'Alfred*.
*(situé dans Library/applicationsupport/alfred/databses/alipboard.alfdp.data
pour dupliquer ces images dans mon dossier de captures d'écran/téléchargements/bureau. (alfred supprime l'historique de mon presse-papiers toutes les 24H)
Maintenant, j'ai toujours une copie sauvegardée de la capture d'écran sur mon disque, ainsi que la capture d'écran dans mon presse-papiers.]
setopt rematchpcre
function pngpaste() {
local name="${1}"
[[ "$name" =~ '\.png$' ]] || name+=.png
osascript -e "tell application \"System Events\" to ¬
write (the clipboard as «class PNGf») to ¬
(make new file at folder \"$(pwd)\" with properties ¬
{name:\"${name}\"})"
}
function jpgpaste() {
local name="${1}"
[[ "$name" =~ '\.jpg$' ]] || name+=.jpg
osascript -e "tell application \"System Events\" to ¬
write (the clipboard as JPEG picture) to ¬
(make new file at folder \"$(pwd)\" with properties ¬
{name:\"${name}\"})"
}
Utilisation :
pngpaste a1.png
#or
jpgpaste a1.jpg
@WolfgangFahl C'est zsh, et cela peut aussi fonctionner avec bash. Vous pouvez coller les définitions de fonctions directement dans l'application de terminal par défaut, puis les utiliser comme indiqué. Si vous êtes toujours confus, lisez un guide de démarrage rapide sur zsh.
-Merci pour cette réponse rapide. J'utilise bash et ksh depuis des années, mais zsh est un mot grec pour moi. Vous pourriez ajouter un sheebang zsh pour clarifier ce que vous faites. Il faut que cela aille dans le profil ou que ce soit deux scripts ou des liens pour le même fichier ?
LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.