Come posso ritagliare un'immagine al centro? Perché so che la scatola è una 4-tupla che definisce la coordinata sinistra, superiore, destra e inferiore, ma non so come ottenere queste coordinate in modo che ritagli al centro.Ritagliare un'immagine al centro usando PIL
risposta
Supponendo che si conosce la dimensione che si desidera ritagliare a (X new_height new_width):
import Image
im = Image.open(<your image>)
width, height = im.size # Get dimensions
left = (width - new_width)/2
top = (height - new_height)/2
right = (width + new_width)/2
bottom = (height + new_height)/2
im.crop((left, top, right, bottom))
Questo si romperà se si tenta di ritagliare una piccola immagine più grande, ma ho intenzione di assumere hai vinto ci sto provando (o che puoi prendere quel caso e non ritagliare l'immagine).
Ok, finalmente l'ho fatto funzionare! Grazie mille. – user2401069
Piccola correzione, la coltura richiede un array. im.crop ((a sinistra, in alto, a destra, in basso)) – freakTheMighty
Nitpick: intendi una sequenza, non una matrice. :) L'arrotondamento – EOL
Un potenziale problema con la soluzione proposta è nel caso ci sia una differenza dispari tra la dimensione desiderata e la vecchia dimensione. Non puoi avere mezzo pixel su ciascun lato. Uno deve scegliere un lato per inserire un pixel in più.
Se c'è una differenza dispari per l'orizzontale, il codice riportato sotto posizionerà il pixel in più a destra, e se c'è una differenza dispari sulla verticale, il pixel in più va verso il basso.
import numpy as np
def centeredCrop(img, new_height, new_width):
width = np.size(img,1)
height = np.size(img,0)
left = np.ceil((width - new_width)/2.)
top = np.ceil((height - new_height)/2.)
right = np.floor((width + new_width)/2.)
bottom = np.floor((height + new_height)/2.)
cImg = img[top:bottom, left:right]
return cImg
non è corretto, l'immagine del risultato non avrà sempre le dimensioni richieste. La formula corretta è 'right = width - floor ((width - new_width)/2)' –
Questa è la funzione che stavo cercando:
from PIL import Image
im = Image.open("test.jpg")
crop_rectangle = (50, 50, 200, 200)
cropped_im = im.crop(crop_rectangle)
cropped_im.show()
Tratto da another answer
- 1. Ritagliare l'immagine usando PIL in python
- 2. Testo allineato al centro/centrale con PIL?
- 3. Ritagliare automaticamente un'immagine con python/PIL
- 4. Come ritagliare un'immagine in OpenCV usando Python
- 5. Ritagliare l'immagine usando CGImageCreateWithImageInRect
- 6. Impossibile ritagliare l'immagine usando mini_magick
- 7. Centro al centro dello schermo
- 8. Crea un alone attorno al testo in Python usando PIL?
- 9. centro h1 al centro dello schermo
- 10. ViewPagerIndicator - Imposta TabPageIndicator al centro
- 11. Rileva forme geometriche semplici usando PILLOW (PIL)
- 12. Disegna il testo al centro
- 13. Allineare un pulsante al centro
- 14. Ruota rettangolo intorno al centro
- 15. Visualizza al centro di NSScrollView
- 16. Converti uscita pyBarcode al PIL file immagine
- 17. Sfondo video HTML5, mantenere il centro del video al centro
- 18. Allineare il paragrafo al centro della pagina
- 19. UITextField il testo non appare al centro
- 20. Android Canvas.drawCircle al centro dello schermo
- 21. Come allineare i componenti JSF al centro
- 22. RecyclerView smoothScroll per posizionarsi al centro. android
- 23. Come ritagliare un'immagine con php usando jquery imgAreaSelect?
- 24. Ritagliare l'acquisizione dello schermo PhantomJS in base al contenuto
- 25. Come impostare l'immagine al centro in FrameLayout
- 26. Come posizionare l'immagine al centro/al centro sia verticalmente che orizzontalmente
- 27. Come ritagliare un'immagine usando jquery ajax e php?
- 28. Come analizzare l'immagine bitmap in python, usando PIL?
- 29. Come inviare un'immagine generata da PIL al browser?
- 30. Python windows 7 screenshot senza PIL
si conosce la dimensione dell'immagine e la dimensione dell'immagine più piccola che si desidera ottenere, I assumere? Hai qualcosa da mostrare dove hai provato? –