আমি অনুপস্থিত এটি করার কোন সুস্পষ্ট উপায় আছে? আমি কেবল থাম্বনেইল তৈরি করার চেষ্টা করছি।
আমি অনুপস্থিত এটি করার কোন সুস্পষ্ট উপায় আছে? আমি কেবল থাম্বনেইল তৈরি করার চেষ্টা করছি।
উত্তর:
সর্বাধিক আকার নির্ধারণ করুন। তারপরে, গ্রহণ করে একটি আকারের অনুপাত গণনা করুনmin(maxwidth/width, maxheight/height)
।
সঠিক আকার হয় oldsize*ratio
।
এটি করার জন্য অবশ্যই একটি গ্রন্থাগার পদ্ধতি রয়েছে: পদ্ধতিটি Image.thumbnail
।
নীচে পিআইএল ডকুমেন্টেশন থেকে একটি (সম্পাদিত) উদাহরণ দেওয়া আছে ।
import os, sys
import Image
size = 128, 128
for infile in sys.argv[1:]:
outfile = os.path.splitext(infile)[0] + ".thumbnail"
if infile != outfile:
try:
im = Image.open(infile)
im.thumbnail(size, Image.ANTIALIAS)
im.save(outfile, "JPEG")
except IOError:
print "cannot create thumbnail for '%s'" % infile
s= img.size(); ratio = MAXWIDTH/s[0]; newimg = img.resize((s[0]*ratio, s[1]*ratio), Image.ANTIALIAS)
? (যে বিন্দু বিভাগ ভাসমান যদিও :) জন্য এর
ANTIALIAS
পিআইএল এর জনপ্রিয় বালিশ কাঁটাচামচ ব্যবহারকারীদের জন্য আর পছন্দ করা হয় না। pillow.readthedocs.org/en/3.0.x/releasenotes/…
thumbnail
কেবল তখনই কাজ করবে যদি ফলাফলের চিত্রটি মূল চিত্রের চেয়ে ছোট হয়। যে কারণে আমি অনুমান করব যে ব্যবহার resize
করা সবচেয়ে ভাল উপায়।
এই স্ক্রিপ্টটি পিআইএল (পাইথন ইমেজিং লাইব্রেরি) ব্যবহার করে একটি চিত্র (somepic.jpg) আকার পরিবর্তন করে 300 পিক্সেলের প্রস্থ এবং নতুন প্রস্থের সমানুপাতিক উচ্চতা করবে। এটি মূল প্রস্থ (img.size [0]) এর কত শতাংশ 300 পিক্সেল তা নির্ধারণ করে এবং তারপরে সেই শতাংশের মাধ্যমে মূল উচ্চতা (img.size [1]) গুণ করে does আপনার চিত্রগুলির ডিফল্ট প্রস্থ পরিবর্তন করতে অন্য কোনও সংখ্যায় "বেসউইথ" পরিবর্তন করুন।
from PIL import Image
basewidth = 300
img = Image.open('somepic.jpg')
wpercent = (basewidth/float(img.size[0]))
hsize = int((float(img.size[1])*float(wpercent)))
img = img.resize((basewidth,hsize), Image.ANTIALIAS)
img.save('sompic.jpg')
sompic.jpg
। কেন এমন হয়? আমি পাইথন 3.x ব্যবহার করছি
.jpeg
, ব্যবহার করুন img.save('sompic.jpg', 'JPEG')
।
PIL.Image.ANTIALIAS
বিকল্পের জন্য resize
, আসলে হওয়া উচিত PIL.Image.LANCZOS
, যদিও তারা উভয় 1
মান দেখতে pillow.readthedocs.io/en/3.1.x/reference/...
আমি পিআইএল এর থাম্বনেইল পদ্ধতিটি ব্যবহার করারও পরামর্শ দিচ্ছি, কারণ এটি আপনার থেকে সমস্ত অনুপাতের ঝামেলা সরিয়ে দেয়।
একটি গুরুত্বপূর্ণ ইঙ্গিত, যদিও: প্রতিস্থাপন
im.thumbnail(size)
সঙ্গে
im.thumbnail(size,Image.ANTIALIAS)
ডিফল্টরূপে, পিআইএল পুনরায় আকার দেওয়ার জন্য ইমেজ.নোয়ার্স্ট ফিল্টার ব্যবহার করে যার ফলস্বরূপ ভাল পারফরম্যান্স হয় তবে নিম্ন মানের।
Image.thumbnail
।
@ টমভনের ভিত্তিতে, আমি নিম্নলিখিতগুলি ব্যবহার করে শেষ করেছি (আপনার কেসটি বেছে নিন):
ক) উচ্চতা পুনরায় আকার দেওয়া ( আমি নতুন প্রস্থ জানি, তাই আমার নতুন উচ্চতা প্রয়োজন )
new_width = 680
new_height = new_width * height / width
খ) আকার পরিবর্তন করে ( আমি নতুন উচ্চতা জানি, তাই আমার নতুন প্রস্থের প্রয়োজন )
new_height = 680
new_width = new_height * width / height
তারপরে:
img = img.resize((new_width, new_height), Image.ANTIALIAS)
resize
কলটিতে, আপনি new_width
উচ্চতা এবং প্রস্থ উভয়ের জন্য ব্যবহার করছেন ?
from PIL import Image
img = Image.open('/your image path/image.jpg') # image extension *.png,*.jpg
new_width = 200
new_height = 300
img = img.resize((new_width, new_height), Image.ANTIALIAS)
img.save('output image name.png') # format may what you want *.png, *jpg, *.gif
আপনি যদি একই দিক অনুপাত বজায় রাখার চেষ্টা করছেন, তবে আপনি কি মূল আকারের কিছু শতাংশের মাধ্যমে আকার পরিবর্তন করবেন না?
উদাহরণস্বরূপ, মূল আকারের অর্ধেক
half = 0.5
out = im.resize( [int(half * s) for s in im.size] )
from PIL import Image
from resizeimage import resizeimage
def resize_file(in_file, out_file, size):
with open(in_file) as fd:
image = resizeimage.resize_thumbnail(Image.open(fd), size)
image.save(out_file)
image.close()
resize_file('foo.tif', 'foo_small.jpg', (256, 256))
আমি এই গ্রন্থাগারটি ব্যবহার করি:
pip install python-resize-image
এই প্রশ্নটি কেবলমাত্র আরও আধুনিক মোড়কের সাথে আপডেট করে এই গ্রন্থাগারটি বালিশ (পিআইএল এর একটি কাঁটাচামচ) মুড়ে ফেলে https://pypi.org/project/python-resize-image/
আপনাকে এরকম কিছু করার অনুমতি দিচ্ছে: -
from PIL import Image
from resizeimage import resizeimage
fd_img = open('test-image.jpeg', 'r')
img = Image.open(fd_img)
img = resizeimage.resize_width(img, 200)
img.save('test-image-width.jpeg', img.format)
fd_img.close()
উপরের লিঙ্কে আরও উদাহরণ গাদা করে।
আমি একটি স্লাইডশো ভিডিওর জন্য কিছু চিত্রের আকার পরিবর্তন করার চেষ্টা করছিলাম এবং সে কারণে আমি কেবল একটি সর্বোচ্চ মাত্রা নয়, একটি সর্বোচ্চ প্রস্থ এবং একটি সর্বোচ্চ উচ্চতা (ভিডিও ফ্রেমের আকার) চেয়েছিলাম ।
সেখানে সবসময় একটি প্রতিকৃতি ভিডিও সম্ভাবনা ছিল ...
দ্যImage.thumbnail
পদ্ধতি প্রতিশ্রুতি ছিল, কিন্তু আমি এটা, upscale একটি ছোট চিত্র তৈরি করতে না পারে।
সুতরাং আমি এখানে (বা অন্য কোনও জায়গায়) এটি করার কোনও সুস্পষ্ট উপায় খুঁজে না পাওয়ার পরে, আমি এই ফাংশনটি লিখেছি এবং আসার জন্য এটি এখানে রেখেছি:
from PIL import Image
def get_resized_img(img_path, video_size):
img = Image.open(img_path)
width, height = video_size # these are the MAX dimensions
video_ratio = width / height
img_ratio = img.size[0] / img.size[1]
if video_ratio >= 1: # the video is wide
if img_ratio <= video_ratio: # image is not wide enough
width_new = int(height * img_ratio)
size_new = width_new, height
else: # image is wider than video
height_new = int(width / img_ratio)
size_new = width, height_new
else: # the video is tall
if img_ratio >= video_ratio: # image is not tall enough
height_new = int(width / img_ratio)
size_new = width, height_new
else: # image is taller than video
width_new = int(height * img_ratio)
size_new = width_new, height
return img.resize(size_new, resample=Image.LANCZOS)
সীমাবদ্ধ অনুপাত রাখতে এবং সর্বাধিক প্রস্থ / উচ্চতা অতিক্রম করার জন্য একটি সহজ পদ্ধতি। দৃষ্টিনন্দন নয় তবে কাজটি সম্পন্ন হয়েছে এবং এটি সহজে বোঝা যায়:
def resize(img_path, max_px_size, output_folder):
with Image.open(img_path) as img:
width_0, height_0 = img.size
out_f_name = os.path.split(img_path)[-1]
out_f_path = os.path.join(output_folder, out_f_name)
if max((width_0, height_0)) <= max_px_size:
print('writing {} to disk (no change from original)'.format(out_f_path))
img.save(out_f_path)
return
if width_0 > height_0:
wpercent = max_px_size / float(width_0)
hsize = int(float(height_0) * float(wpercent))
img = img.resize((max_px_size, hsize), Image.ANTIALIAS)
print('writing {} to disk'.format(out_f_path))
img.save(out_f_path)
return
if width_0 < height_0:
hpercent = max_px_size / float(height_0)
wsize = int(float(width_0) * float(hpercent))
img = img.resize((max_px_size, wsize), Image.ANTIALIAS)
print('writing {} to disk'.format(out_f_path))
img.save(out_f_path)
return
এখানে একটি পাইথন স্ক্রিপ্ট যা ব্যাচ চিত্রের আকার পরিবর্তন করতে এই ফাংশনটি ব্যবহার করে।
উপরের উত্তরটি "টমভন" দ্বারা আপডেট করেছেন
from PIL import Image
img = Image.open(image_path)
width, height = img.size[:2]
if height > width:
baseheight = 64
hpercent = (baseheight/float(img.size[1]))
wsize = int((float(img.size[0])*float(hpercent)))
img = img.resize((wsize, baseheight), Image.ANTIALIAS)
img.save('resized.jpg')
else:
basewidth = 64
wpercent = (basewidth/float(img.size[0]))
hsize = int((float(img.size[1])*float(wpercent)))
img = img.resize((basewidth,hsize), Image.ANTIALIAS)
img.save('resized.jpg')
আমার কুৎসিত উদাহরণ।
ফাংশন এই জাতীয় ফাইল পান: "পিক [0-9a-z]। [এক্সটেনশন]", সেগুলি আকার পরিবর্তন করে 120x120 করা, বিভাগকে কেন্দ্রের দিকে সরানো এবং "আইকো [0-9a-z] এ সংরক্ষণ করুন। [এক্সটেনশন]", প্রতিকৃতি সহ কাজ করে এবং ল্যান্ডস্কেপ:
def imageResize(filepath):
from PIL import Image
file_dir=os.path.split(filepath)
img = Image.open(filepath)
if img.size[0] > img.size[1]:
aspect = img.size[1]/120
new_size = (img.size[0]/aspect, 120)
else:
aspect = img.size[0]/120
new_size = (120, img.size[1]/aspect)
img.resize(new_size).save(file_dir[0]+'/ico'+file_dir[1][3:])
img = Image.open(file_dir[0]+'/ico'+file_dir[1][3:])
if img.size[0] > img.size[1]:
new_img = img.crop( (
(((img.size[0])-120)/2),
0,
120+(((img.size[0])-120)/2),
120
) )
else:
new_img = img.crop( (
0,
(((img.size[1])-120)/2),
120,
120+(((img.size[1])-120)/2)
) )
new_img.save(file_dir[0]+'/ico'+file_dir[1][3:])
আমি চিত্রটিকে এমনভাবে আকার দিয়েছি এবং এটি খুব ভালভাবে কাজ করছে
from io import BytesIO
from django.core.files.uploadedfile import InMemoryUploadedFile
import os, sys
from PIL import Image
def imageResize(image):
outputIoStream = BytesIO()
imageTemproaryResized = imageTemproary.resize( (1920,1080), Image.ANTIALIAS)
imageTemproaryResized.save(outputIoStream , format='PNG', quality='10')
outputIoStream.seek(0)
uploadedImage = InMemoryUploadedFile(outputIoStream,'ImageField', "%s.jpg" % image.name.split('.')[0], 'image/jpeg', sys.getsizeof(outputIoStream), None)
## For upload local folder
fs = FileSystemStorage()
filename = fs.save(uploadedImage.name, uploadedImage)
আমি পুনরায় আকারের একটি সংস্করণও যুক্ত করব যা দিক অনুপাত স্থির রাখে। এই ক্ষেত্রে, এটি প্রাথমিক চিত্র অনুপাত, এসপ_রেট , যা ভাসমান (!) এর উপর ভিত্তি করে নতুন চিত্রের প্রস্থের সাথে মিলের জন্য উচ্চতা সামঞ্জস্য করবে । তবে এর পরিবর্তে প্রস্থটি উচ্চতার সাথে সামঞ্জস্য করার জন্য আপনাকে কেবল একটি লাইন মন্তব্য করতে হবে এবং অন্য লুপে অন্যটিকে অসুবিধে করতে হবে । আপনি দেখতে পাবেন, কোথায়।
আপনার সেমিকোলনগুলির প্রয়োজন নেই (;), আমি সেগুলি কেবলমাত্র আমি প্রায়শই ব্যবহার করি।
from PIL import Image
img_path = "filename.png";
img = Image.open(img_path); # puts our image to the buffer of the PIL.Image object
width, height = img.size;
asp_rat = width/height;
# Enter new width (in pixels)
new_width = 50;
# Enter new height (in pixels)
new_height = 54;
new_rat = new_width/new_height;
if (new_rat == asp_rat):
img = img.resize((new_width, new_height), Image.ANTIALIAS);
# adjusts the height to match the width
# NOTE: if you want to adjust the width to the height, instead ->
# uncomment the second line (new_width) and comment the first one (new_height)
else:
new_height = round(new_width / asp_rat);
#new_width = round(new_height * asp_rat);
img = img.resize((new_width, new_height), Image.ANTIALIAS);
# usage: resize((x,y), resample)
# resample filter -> PIL.Image.BILINEAR, PIL.Image.NEAREST (default), PIL.Image.BICUBIC, etc..
# https://pillow.readthedocs.io/en/3.1.x/reference/Image.html#PIL.Image.Image.resize
# Enter the name under which you would like to save the new image
img.save("outputname.png");
এবং, এটি সম্পন্ন হয়েছে। আমি যতটা পারি ডকুমেন্ট করার চেষ্টা করেছি, তাই এটি পরিষ্কার।
আমি আশা করি এটি কারও পক্ষে উপকারী হতে পারে!
আপনার চিত্র ফাইল খুলুন
from PIL import Image
im = Image.open("image.png")
পিআইএল ইমেজ ব্যবহার করুন। আকার (আকার, পুনরায় নমুনা = 0) পদ্ধতি , যেখানে আপনি নিজের চিত্রটির (প্রশস্ততা, উচ্চতা) 2-টিউপল আকারের জন্য প্রতিস্থাপন করবেন।
এটি আপনার চিত্রটি মূল আকারে প্রদর্শন করবে:
display(im.resize((int(im.size[0]),int(im.size[1])), 0) )
এটি আপনার চিত্রটি 1/2 আকারে প্রদর্শন করবে:
display(im.resize((int(im.size[0]/2),int(im.size[1]/2)), 0) )
এটি আপনার চিত্রটি 1/3 আকারে প্রদর্শন করবে:
display(im.resize((int(im.size[0]/3),int(im.size[1]/3)), 0) )
এটি আপনার চিত্রটি 1/4 আকারে প্রদর্শন করবে:
display(im.resize((int(im.size[0]/4),int(im.size[1]/4)), 0) )
ইত্যাদি
display()
এবং কোথায় অবস্থিত?
from PIL import Image
from resizeimage import resizeimage
def resize_file(in_file, out_file, size):
with open(in_file) as fd:
image = resizeimage.resize_thumbnail(Image.open(fd), size)
image.save(out_file)
image.close()
resize_file('foo.tif', 'foo_small.jpg', (256, 256))
আপনি নীচের কোড দ্বারা চিত্রের আকার পরিবর্তন করতে পারেন:
From PIL import Image
img=Image.open('Filename.jpg') # paste image in python folder
print(img.size())
new_img=img.resize((400,400))
new_img.save('new_filename.jpg')